Flutter全局共享数据插件idkit_gshared的使用

Flutter全局共享数据插件idkit_gshared的使用

idkit_gshared

1. 简介

此插件用于Flutter项目的全局数据共享。以下是其方法的详细说明和使用示例。


2. 使用

预条件

首先创建一个全局共享数据管理对象:

final IDKitGShared gShared = IDKitGShared();
基本共享
注册
  1. 注册intlistmap等类型的数据:
gShared.register<int>(520);
gShared.register<int>(1314, mark: 'love');
  1. 注册自定义对象:
gShared.register(
    const TestInfo('Asynchronous registration'),
);
gShared.register(
    const TestInfo('Asynchronous registration - Mark'),
    mark: 'mark',
);
  1. 异步注册数据:
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',
);
读取
  1. 读取intlistmap等类型的数据:
gShared.read<int>() -> int?
gShared.read<int>(mark: 'love') -> int?
  1. 读取自定义对象:
gShared.read<TestInfo>() -> TestInfo?
gShared.read<TestInfo>(mark: 'mark') -> TestInfo?
  1. 异步读取数据:
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

1 回复

更多关于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');
  },
);
回到顶部