Flutter全局变量管理插件flutter_globals的使用
Flutter全局变量管理插件flutter_globals的使用
Global
是一个基于单例的动态状态管理器,允许以全局方式管理变量,并且与 flutter_secure_storage
集成良好。这使得您的应用程序的数据持久化变得非常方便,例如缓存、令牌等常用信息可以轻松访问。
特性
- refresh(dynamic dependency): 通知特定监听器更新其状态。
- refreshAll(): 通知所有监听器更新其状态。
- statusOf(String key): 返回一个工作者的状态。
- setStatus(String key, dynamic status): 设置一个工作者的状态。
- set(String key, dynamic value): 在全局中设置与键关联的值并返回该键的引用。
- make(String key, Function(dynamic) maker): 使用
maker
函数创建一个值并返回该键的引用。 - get(String key): 获取全局中与键关联的值。
- store(String key, dynamic value): 使用
flutter_secure_storage
将值存储在设备上。 - free(String key): 移除全局中的键及其值。
- ref(String key): 返回全局中键的引用。
- clear(): 移除全局中的所有值。
- lock(String key): 锁定特定键以避免更改。
- unlock(String key): 解锁先前锁定的键。
- on(String key, Function(dynamic params, Function(dynamic) setStatus) work): 为全局中的键定义要执行的工作。
- off(String key): 移除与键关联的工作。
- call(String key, {dynamic params}): 执行与键关联的工作并更新状态。
- caller(String key, {dynamic params}): 返回一个函数,可用于执行与键关联的工作。
- bind(dynamic obj): 返回对象的单例实例。
- dispose(dynamic obj): 移除对象的单例实例。
开始使用
Global
不需要任何设置,只需安装包并在需要的地方使用即可!
使用示例
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
// 定义枚举类型
enum MyGlobals { token, userName, userId }
// 定义动作枚举类型
enum MyAction {
absent,
loading,
sucess,
fail,
}
// 定义控制器类
class MyController {
List<String> myExamples = [];
int counter = 0;
// 登录方法
Future<void> login() async {
final token = await Restify.get<String>("/login");
Global.set(MyGlobals.token, token).store(); // 将令牌保存到本地存储并全局可用
}
// 自定义函数
Future<void> myFunction() async {
Global.setStatus(MyAction.loading);
try {
final examples = await Restify.get<List<String>>("/examples", bearerToken: Global.get(MyGlobals.token));
myExamples = examples;
Global.setStatus(MyAction.sucess); // 更新请求状态为成功并更新反应式组件
} catch (err) {
Global.setStatus(MyAction.fail); // 更新请求状态为失败并更新反应式组件
}
}
// 计数方法
void count() {
counter++;
Global.refresh(); // 更新反应式组件
}
}
// 主页面类
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 绑定控制器
late final MyController myController = Global.bind(MyController());
[@override](/user/override)
void initState() {
super.initState();
myController.myFunction();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Reactive(() => Text("Counter: ${myController.counter}")), // 使文本具有反应性
),
body: ReactiveStatus<MyAction>(
// 允许屏幕根据状态更改其组件
{
MyAction.sucess: () => ListView(
children: myController.myExamples.map((e) => Text(e)).toList(),
),
MyAction.fail: () => const Text(" fail :( "),
MyAction.loading: () => const CircularProgressIndicator(),
},
),
floatingActionButton: FloatingActionButton(
onPressed: myController.count,
child: const Icon(Icons.add),
),
);
}
}
更多关于Flutter全局变量管理插件flutter_globals的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter全局变量管理插件flutter_globals的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_globals
是一个用于管理全局变量的 Flutter 插件。它提供了一种简单的方式来在应用程序中共享和管理全局状态,而不需要使用复杂的状态管理解决方案如 Provider
或 Riverpod
。以下是 flutter_globals
的基本使用方法。
1. 安装插件
首先,你需要在 pubspec.yaml
文件中添加 flutter_globals
依赖:
dependencies:
flutter:
sdk: flutter
flutter_globals: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 flutter_globals
:
import 'package:flutter_globals/flutter_globals.dart';
3. 创建全局变量
你可以使用 Global
类来创建全局变量。例如:
final Global<int> counter = Global<int>(0);
这将创建一个名为 counter
的全局变量,并将其初始值设置为 0
。
4. 访问和修改全局变量
你可以通过 value
属性来访问和修改全局变量的值:
void incrementCounter() {
counter.value++;
}
void printCounter() {
print('Counter value: ${counter.value}');
}
5. 在 Widget 中使用全局变量
你可以直接在 Widget 中使用全局变量。例如,在一个 StatelessWidget
中:
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Globals Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Counter Value: ${counter.value}',
style: Theme.of(context).textTheme.headline4,
),
ElevatedButton(
onPressed: incrementCounter,
child: Text('Increment Counter'),
),
],
),
),
);
}
}
6. 监听全局变量的变化
你可以使用 addListener
方法来监听全局变量的变化:
void main() {
counter.addListener(() {
print('Counter changed to: ${counter.value}');
});
runApp(MyApp());
}
7. 移除监听器
如果你不再需要监听全局变量的变化,可以使用 removeListener
方法来移除监听器:
void dispose() {
counter.removeListener(myListener);
}
8. 销毁全局变量
当你不再需要某个全局变量时,可以调用 dispose
方法来销毁它:
void dispose() {
counter.dispose();
}
9. 完整示例
以下是一个完整的示例,展示了如何使用 flutter_globals
来管理全局变量:
import 'package:flutter/material.dart';
import 'package:flutter_globals/flutter_globals.dart';
final Global<int> counter = Global<int>(0);
void incrementCounter() {
counter.value++;
}
void printCounter() {
print('Counter value: ${counter.value}');
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Globals Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Globals Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Counter Value: ${counter.value}',
style: Theme.of(context).textTheme.headline4,
),
ElevatedButton(
onPressed: incrementCounter,
child: Text('Increment Counter'),
),
],
),
),
);
}
}
void main() {
counter.addListener(() {
print('Counter changed to: ${counter.value}');
});
runApp(MyApp());
}