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
更多关于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
方法来获取并显示设备信息。
注意事项
- API文档:务必参考
sghi_core
插件的官方文档或源代码,了解具体的API和使用方法。 - 错误处理:在实际应用中,添加适当的错误处理逻辑,以确保应用的健壮性。
- 权限:如果插件需要访问敏感信息(如设备信息、存储等),请确保在
AndroidManifest.xml
和Info.plist
中声明必要的权限。
由于sghi_core
的具体实现和API未知,以上代码仅为示例,具体使用时请根据实际插件的文档进行调整。