Flutter全局共享数据插件idkit_gshared的使用
Flutter全局共享数据插件idkit_gshared的使用
idkit_gshared
1. 简介
此插件用于Flutter项目的全局数据共享。以下是其方法的详细说明和使用示例。
2. 使用
预条件
首先创建一个全局共享数据管理对象:
final IDKitGShared gShared = IDKitGShared();
基本共享
注册
- 注册
int、list、map等类型的数据:
gShared.register<int>(520);
gShared.register<int>(1314, mark: 'love');
- 注册自定义对象:
gShared.register(
const TestInfo('Asynchronous registration'),
);
gShared.register(
const TestInfo('Asynchronous registration - Mark'),
mark: 'mark',
);
- 异步注册数据:
gShared.register<Future<String>>(
Future.delayed(const Duration(seconds: 1), () {
return '110';
}),
);
gShared.register<Future<TestInfo>>(
Future.delayed(const Duration(seconds: 1), () {
return const TestInfo('120');
}),
mark: 'mark',
);
读取
- 读取
int、list、map等类型的数据:
gShared.read<int>() -> int?
gShared.read<int>(mark: 'love') -> int?
- 读取自定义对象:
gShared.read<TestInfo>() -> TestInfo?
gShared.read<TestInfo>(mark: 'mark') -> TestInfo?
- 异步读取数据:
FutureBuilder<String>(
future: gShared.read<Future<String>>(),
initialData: '000',
builder: (_, AsyncSnapshot<String> snapshot) {
return Text('${snapshot.data}');
},
),
FutureBuilder<String>(
future: gShared.read<Future<String>>(mark: 'mark'),
initialData: '000 - mark',
builder: (_, AsyncSnapshot<String> snapshot) {
return Text('${snapshot.data}');
},
),
更新数据
gShared.update<String>((value) => 'I am a baby!');
gShared.update<String>((value) => 'I am a baby!', mark: 'mark');
取消注册
gShared.unRegister<String>();
gShared.unRegister<String>(mark: 'mark');
或
gShared.unRegisterAll();
gShared.unRegisterAll(listen: true);
监听共享
注册监听
gShared.registerListen<String>();
gShared.registerListen<String>(mark: 'mark');
观察数据变化
StreamBuilder<String?>(
stream: gShared.watch<String>(),
initialData: 'listen - 0',
builder: (_, s) {
final String? a = s.data;
return Text(a ?? 'listen - 0');
},
),
StreamBuilder<String?>(
stream: gShared.watch<String>(mark: 'mark'),
initialData: 'listen - 0',
builder: (_, s) {
final String? a = s.data;
return Text(a ?? 'listen - 0');
},
)
取消监听
gShared.unRegisterListen<String>();
gShared.unRegisterListen<String>(mark: 'mark');
转换监听
gShared.convertListen<int>();
gShared.convertListen<int>(mark: 'mark');
3. 总结
此版本的插件涵盖了上述部分方法。如果您有任何疑问或不理解的地方,请随时留言!
完整示例Demo
以下是一个完整的示例代码,展示了如何使用idkit_gshared插件进行全局数据共享:
import 'package:flutter/material.dart';
import 'package:idkit_gshared/idkit_gshared.dart';
/// 全局共享管理对象
final IDKitGShared gShared = IDKitGShared();
/// 测试类
class TestInfo {
final String name;
const TestInfo(this.name);
}
void main() {
gShared.register<int>(520);
gShared.register<int>(1314, mark: 'love');
gShared.register(
const TestInfo('Asynchronous registration'),
);
gShared.register(
const TestInfo('Asynchronous registration - Mark'),
mark: 'r_mark',
);
gShared.register<Future<String>>(
Future.delayed(const Duration(seconds: 1), () {
return '110';
}),
);
gShared.register<Future<TestInfo>>(
Future.delayed(const Duration(seconds: 1), () {
return const TestInfo('120');
}),
mark: 'mark',
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('idkit_gshared 测试'),
),
body: Container(
alignment: Alignment.center,
child: Column(
children: [
Text('${gShared.read<int>() ?? 0}'),
Text('${gShared.read<int>(mark: 'love') ?? 0}'),
Text('${gShared.read<TestInfo>()?.name ?? 0}'),
FutureBuilder<String>(
future: gShared.read<Future<String>>(),
initialData: '000',
builder: (_, AsyncSnapshot<String> snapshot) {
return Text('${snapshot.data}');
},
),
FutureBuilder<String>(
future: gShared.read<Future<String>>(mark: 'mark'),
initialData: '000 - mark',
builder: (_, AsyncSnapshot<String> snapshot) {
return Text('${snapshot.data}');
},
),
ElevatedButton(
child: const Text('下一步'),
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) {
return const SecondPage();
}));
},
)
],
),
),
);
}
}
class SecondPage extends StatefulWidget {
const SecondPage({Key? key}) : super(key: key);
[@override](/user/override)
State<SecondPage> createState() => _SecondPageState();
}
class _SecondPageState extends State<SecondPage> {
late int count = 0;
[@override](/user/override)
Widget build(BuildContext context) {
gShared.registerListen<String>();
gShared.registerListen<String>(mark: 'mark');
return Scaffold(
appBar: AppBar(
title: const Text('idkit_gshared:多层数据共享'),
),
body: Container(
alignment: Alignment.center,
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(gShared.read<String>(mark: 'wz') ?? '默认值: 网络'),
StreamBuilder<String?>(
stream: gShared.watch<String>(),
initialData: '监听 - 0',
builder: (_, s) {
final String? a = s.data;
return Text(a ?? '监听 - 0');
},
),
StreamBuilder<String?>(
stream: gShared.watch<String>(mark: 'mark'),
initialData: '监听 - 0',
builder: (_, s) {
final String? a = s.data;
return Text(a ?? '监听 - 0');
},
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
ElevatedButton(
onPressed: () {
count++;
gShared.add<String>('监听 - $count', mark: 'listen');
},
child: const Text('增加计数 +1'),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) {
return const ThreePage();
}));
},
child: const Text('下一步按钮'),
),
ElevatedButton(
onPressed: () {
gShared.unRegister<String>();
gShared.unRegister<String>(mark: 'mark');
gShared.unRegisterAll();
gShared.unRegisterAll(listen: true);
gShared.update<String>((value) => '我是婴儿!');
},
child: const Text('更新数据'),
)
],
)
],
),
),
);
}
}
class ThreePage extends StatefulWidget {
const ThreePage({Key? key}) : super(key: key);
[@override](/user/override)
State<ThreePage> createState() => _ThreePageState();
}
class _ThreePageState extends State<ThreePage> {
late int count = 0;
[@override](/user/override)
Widget build(BuildContext context) {
gShared.convertListen<int>();
gShared.unRegisterListen<String>();
gShared.unRegisterListen<String>(mark: 'mark');
return Scaffold(
appBar: AppBar(
title: const Text('第三页 3'),
),
body: Container(
alignment: Alignment.center,
child: Column(
children: [
Text(gShared.read<String>() ?? ''),
StreamBuilder<int?>(
stream: gShared.watch<int>(),
initialData: 0000,
builder: (_, s) {
return Text('${s.data ?? 1111}');
},
)
],
),
),
floatingActionButton: ElevatedButton(
child: const Text('添加更改 +1'),
onPressed: () {
count++;
gShared.add<int>(count);
},
),
);
}
}
更多关于Flutter全局共享数据插件idkit_gshared的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter全局共享数据插件idkit_gshared的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
idkit_gshared 是一个用于 Flutter 的全局共享数据插件,它允许你在应用的任何地方轻松地共享和管理全局状态。以下是如何使用 idkit_gshared 插件的基本步骤:
1. 添加依赖
首先,在你的 pubspec.yaml 文件中添加 idkit_gshared 依赖:
dependencies:
flutter:
sdk: flutter
idkit_gshared: ^版本号
然后运行 flutter pub get 来安装依赖。
2. 初始化全局共享数据
在你的 main.dart 文件中初始化全局共享数据。通常,你可以在 main 函数中完成这一步骤。
import 'package:flutter/material.dart';
import 'package:idkit_gshared/idkit_gshared.dart';
void main() {
// 初始化全局共享数据
GShared.init();
runApp(MyApp());
}
3. 设置全局数据
在应用的任何地方,你都可以使用 GShared 来设置全局数据。
GShared.set('key', 'value');
4. 获取全局数据
你可以使用 GShared 来获取之前设置的全局数据。
var value = GShared.get('key');
print(value); // 输出: value
5. 监听全局数据的变化
idkit_gshared 还支持监听全局数据的变化。你可以使用 GShared.listen 来监听某个键的变化。
GShared.listen('key', (value) {
print('Value changed: $value');
});
6. 移除全局数据
如果你不再需要某个全局数据,可以使用 GShared.remove 来移除它。
GShared.remove('key');
7. 清除所有全局数据
你可以使用 GShared.clear 来清除所有的全局数据。
GShared.clear();
8. 使用 GSharedBuilder 构建 UI
idkit_gshared 还提供了 GSharedBuilder,它可以根据全局数据的变化自动重建 UI。
GSharedBuilder(
key: 'key',
builder: (context, value) {
return Text('Value: $value');
},
);
9. 使用 GSharedProvider 提供数据
你还可以使用 GSharedProvider 来提供全局数据,并在子 widget 中访问它。
GSharedProvider(
key: 'key',
value: 'value',
child: MyWidget(),
);
在 MyWidget 中,你可以使用 GShared.of(context) 来访问全局数据。
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
var value = GShared.of(context, 'key');
return Text('Value: $value');
}
}
10. 使用 GSharedConsumer 消费数据
GSharedConsumer 是一个方便的 widget,它可以在全局数据变化时自动重建。
GSharedConsumer(
key: 'key',
builder: (context, value, child) {
return Text('Value: $value');
},
);

