Flutter核心功能扩展插件sghi_core的使用

Flutter核心功能扩展插件sghi_core的使用

<sgh-core>是一个开源项目,它是由<Savannah Informatics Limited>创建并开源的众多共享库之一。

<sgh-core>为<BeWell-Consumer>和<SladeAdvantage>提供了各种共享辅助方法和函数的封装。

安装指南

要将<sgh-core>用作库,请将其添加到依赖项中。

运行以下命令:

使用Flutter:

flutter pub add sghi_core

这将在你的包的pubspec.yaml文件中添加如下一行(并隐式运行dart pub get):

dependencies:
  sghi_core: ^0.3.140

或者,你可以使用编辑器支持的flutter pub get。查阅你所使用的编辑器文档以了解更多信息。

最后,导入该库:

import 'package:sghi_core/app_wrapper/app_wrapper.dart';

使用方法

查看提供的示例以了解如何使用此包。

Dart & Flutter版本

  • Dart 2: >= 3.0.6
  • Flutter: >=3.19.2

开发与贡献

首先,感谢你花时间来贡献!

确保查阅详细的贡献指南这里,并阅读我们的行为准则这里

GPG签名: 作为贡献者,你需要对提交进行签名。更多详情可以查看这里

许可证

该库根据MIT许可证分发,许可证文件可以在LICENSE中找到。


示例代码

main.dart

// 忽略此文件中无法从主程序到达的部分

import 'package:flutter/material.dart';
import 'package:sghi_core/afya_moja_core/afya_moja_core.dart';
import 'package:sghi_core/app_wrapper/app_config.dart';

import 'package:sghi_core/app_wrapper/app_wrapper.dart';
import 'package:sghi_core/app_wrapper/endpoints_context.dart';
import 'package:sghi_core/dart_fcm/fcm.dart';
import 'package:sghi_core/domain_objects/entities/bio_data.dart';
import 'package:sghi_core/flutter_graphql_client/flutter_graphql_client.dart';
import 'package:sghi_core/user_profile/contacts.dart';

void main() {
  // 更改此类以查看其他示例
  runApp(UiComponentsExample());
}

/// [UiComponentsExample]
class UiComponentsExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: SizedBox(
        // SILPrimaryButton 是此包提供的许多UI组件之一
        // 对于此组件和其他UI组件的更多参数或自定义选项,请参阅项目源文件(`./lib/src/`)
        child: CustomRawMaterialButton(
          buttonKey: const Key('your_button_key'),
          text: 'Button Text',
          borderColor: Colors.black, // 按钮边框颜色
          buttonColor: Colors.black, // 按钮填充颜色
          textColor: Colors.white, // 按钮文本颜色
          customChild: const Icon(
            Icons.add,
            size: 30,
            color: Colors.white,
          ), // 当添加一个自定义子组件而不是文本小部件时使用
          onPressed: () {},
          onLongPress: () {},
        ),
      ),
    );
  }
}

/// [SharedThemesExample]
class SharedThemesExample extends StatefulWidget {
  /// 此小部件是你的应用程序的根节点。
  const SharedThemesExample({super.key});

  [@override](/user/override)
  _SharedThemesExampleState createState() => _SharedThemesExampleState();
}

class _SharedThemesExampleState extends State<SharedThemesExample> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Shared themes example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              '你已经按下了按钮很多次了:',
            ),

            /// 使用在 `spaces.dart` 中导出的 doubles
            const SizedBox(height: Sizing.size4),

            /// 使用在 `text_themes.dart` 中定义的文本主题
            Text('计数器值',
                style: defaultTextTheme.titleLarge!
                    .copyWith(fontWeight: fontWeightRegular)),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        tooltip: '增加',
        backgroundColor: Colors.blue,
        child: const Icon(Icons.add),
      ),
    );
  }
}

/// [AppWrapperExample] 标记为你的应用程序的入口点。
///
/// 包含 [AppWrapper] 类。
///
/// 接受一个 appConfig(例如 `bewellTest`,`myCarehubProd` 等)
/// [appConfig] 是应用程序运行环境和变体配置
/// 这可以是不同的应用程序 `variants` 和它们各自的环境(`prod`,`test`,`demo`,`e2e`)
class AppWrapperExample extends StatelessWidget {
  const AppWrapperExample({super.key, required this.appConfig});

  final AppConfig appConfig;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return AppWrapper(
      appName: 'appName',
      graphQLClient: GraphQlClient(
        'id_token',
        EndpointContext.getGraphQLEndpoint(appConfig),
        'BewellApp',
      ),
      communitiesClient: GraphQlClient(
        'id_token',
        EndpointContext.getGraphQLEndpoint(appConfig),
        'BewellApp',
      ),
      appConfig: appConfig,
      child: Builder(
        builder: (BuildContext context) {
          return const MaterialApp(
            // 应用程序的入口点
          );
        },
      ),
    );
  }
}

/// [DomainObjectsExample]
class DomainObjectsExample extends StatelessWidget {
  DomainObjectsExample({super.key});

  /// 使用此包定义自定义具体类型
  /// 下面的例子使用了此包的 `BioData` 类型。
  final BioData? userBio = BioData(firstName: Name.fromJson('first_name'));

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container();
  }
}

/// [MiscUtilitiesExample]
/// 使用此包定义自定义函数。
/// 下面的例子使用了此包的 `ResponsiveWidget` 类。
class MiscUtilitiesExample extends StatelessWidget {
  const MiscUtilitiesExample({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Responsive Widget Example'),
        ),
        body: ResponsiveWidget(
          largeScreen: LargeScreenContent(),
          mediumScreen: MediumScreenContent(),
          smallScreen: SmallScreenContent(),
        ),
      ),
    );
  }
}

class LargeScreenContent extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: Text('Large Screen Content', style: defaultTextTheme.headlineMedium),
    );
  }
}

class MediumScreenContent extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: Text('Medium Screen Content',
          style: defaultTextTheme.titleLarge!
              .copyWith(fontWeight: fontWeightRegular)),
    );
  }
}

class SmallScreenContent extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: Text(
        'Small Screen Content',
        style: defaultTextTheme.bodyMedium,
      ),
    );
  }
}

/// [DartFCMExample]
/// 使用此包定义fcm函数
class DartFCMExample extends StatefulWidget {
  const DartFCMExample({super.key});

  [@override](/user/override)
  _DartFCMExampleState createState() => _DartFCMExampleState();
}

class _DartFCMExampleState extends State<DartFCMExample> {
  bool hasFinishedLaunching = false;

  [@override](/user/override)
  void didChangeDependencies() {
    if (!hasFinishedLaunching) {
      /// [configure] 负责正确设置
      /// 本地通知(如果需要则请求权限)并连接firebase messaging [onMessage] 回调以显示fcm消息
      SILFCM().configure(context: context);
      hasFinishedLaunching = true;
    }

    super.didChangeDependencies();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        // 你的应用程序
      ),
    );
  }
}

/// [UserProfileExample]
/// 此类渲染 [ContactDetails],这是此包的根页面
///
/// 渲染 [ContactItemsCard],包含以下详细信息:
/// - 用户的联系信息(主要电话号码,主要电子邮件地址,次要联系方式(电话号码和电子邮件))
class UserProfileExample extends StatelessWidget {
  const UserProfileExample({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const ContactDetails();
  }
}

更多关于Flutter核心功能扩展插件sghi_core的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter核心功能扩展插件sghi_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用sghi_core插件的一个基本示例。请注意,由于sghi_core可能是一个特定组织或个人的自定义插件,因此以下示例将基于假设的功能和API。如果sghi_core插件的API和功能有所不同,请根据实际文档进行调整。

步骤 1: 添加依赖

首先,在你的pubspec.yaml文件中添加sghi_core插件的依赖。假设插件在pub.dev上是可用的,你可以这样添加:

dependencies:
  flutter:
    sdk: flutter
  sghi_core: ^x.y.z  # 替换为实际的版本号

然后运行flutter pub get来安装依赖。

步骤 2: 导入插件

在你的Dart文件中导入插件:

import 'package:sghi_core/sghi_core.dart';

步骤 3: 使用插件功能

由于sghi_core的具体功能未知,我将假设它提供一些核心功能,比如数据缓存、设备信息获取等。以下是一些假设的代码示例:

示例 1: 数据缓存

假设sghi_core提供了简单的键值存储功能:

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String cachedData;

  @override
  void initState() {
    super.initState();
    // 假设有一个方法叫`SGHICore.cache.get`用于获取缓存数据
    SGHICore.cache.get('myKey').then((value) {
      setState(() {
        cachedData = value;
      });
    });
  }

  void _saveData() async {
    // 假设有一个方法叫`SGHICore.cache.set`用于设置缓存数据
    await SGHICore.cache.set('myKey', 'Hello, Flutter!');
    setState(() {
      // 可以选择性地更新UI来反映数据已保存
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SGHI Core Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Cached Data: $cachedData'),
              ElevatedButton(
                onPressed: _saveData,
                child: Text('Save Data'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

示例 2: 获取设备信息

假设sghi_core提供了获取设备信息的功能:

void _getDeviceInfo() async {
  // 假设有一个方法叫`SGHICore.device.getInfo`用于获取设备信息
  DeviceInfo deviceInfo = await SGHICore.device.getInfo();
  print('Device Name: ${deviceInfo.name}');
  print('Device OS Version: ${deviceInfo.osVersion}');
  // 根据需要处理设备信息
}

你可以在按钮点击事件或其他地方调用_getDeviceInfo方法来获取并显示设备信息。

注意事项

  1. API文档:务必参考sghi_core插件的官方文档或源代码,了解具体的API和使用方法。
  2. 错误处理:在实际应用中,添加适当的错误处理逻辑,以确保应用的健壮性。
  3. 权限:如果插件需要访问敏感信息(如设备信息、存储等),请确保在AndroidManifest.xmlInfo.plist中声明必要的权限。

由于sghi_core的具体实现和API未知,以上代码仅为示例,具体使用时请根据实际插件的文档进行调整。

回到顶部