Flutter状态管理插件minimals_state_manager的使用
Flutter状态管理插件 minimals_state_manager
的使用
minimals_state_manager
是一个轻量级的状态管理插件,旨在简化Flutter应用中的状态管理。它基于Flutter的原生功能(如InheritedWidget
、ChangeNotifier
、ValueNotifier
等)来实现状态管理。
主要特性
Providers
- MinProvider:用于单一状态管理。
- MinMultiProvider:用于多个状态管理。
示例代码
class YourController1 extends ChangeNotifier {
ValueNotifier<int> count = 0.minx;
void increment() {
count.value++;
notifyListeners();
}
void decrement() {
count.value--;
notifyListeners();
}
}
使用 MinProvider
或 MinMultiProvider
:
// 使用 MinProvider
MinProvider(
controller: YourController1(),
child: YourPage(),
)
// 使用 MinMultiProvider
MinMultiProvider(
controllers: [YourController1(), YourController2()],
child: YourPage(),
)
MinService
MinService
用于保持控制器在整个应用生命周期内保持活跃状态。例如,购物车控制器可以在整个应用中保持状态。
MinMultiProvider(
controllers: [
DashboardController(),
MinService.permanentController(CartController()),
],
child: DashPage(),
)
Observable Widget
Observable widget 可以监听 ValueNotifier
的变化并更新UI。
$(controller.count, (count) => Text('Count $count'))
也可以使用 ValueListenableBuilder
:
ValueListenableBuilder(
valueListenable: controller.count,
builder: (context, count, child) => Text('Count $count'),
)
使用步骤
安装插件
在 pubspec.yaml
文件中添加依赖:
dependencies:
minimals_state_manager: <latest_version>
然后运行以下命令安装插件:
$ flutter pub add minimals_state_manager
示例代码
以下是一个完整的示例,展示如何使用 minimals_state_manager
插件。
main.dart
import 'package:flutter/material.dart';
import 'package:minimals_state_manager/minimals_state_manager.dart';
void main() {
runApp(
MaterialApp(
home: MinProvider(
controller: MyController(),
child: const MyPage(),
),
),
);
}
class MyController extends ChangeNotifier {
final count = 0.minx;
ValueNotifier<User> user = User().minx;
void increment() {
count.value++;
notifyListeners();
}
void decrement() {
count.value--;
notifyListeners();
}
void refresh() {
count.value = 0;
notifyListeners();
}
void onChangedName(String str) {
user.update((val) => val.name = str);
notifyListeners();
}
String? validateName(String? str) {
return str?.length ?? 0 < 2 ? 'insert valid name' : null;
}
void onSaveName(String? newValue) {
user.update((val) => val.name = newValue ?? '');
notifyListeners();
}
}
class User {
User({this.name});
String? name;
}
class MyPage extends StatelessWidget {
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
[@override](/user/override)
Widget build(BuildContext context) {
final controller = MinProvider.use<MyController>(context);
return Scaffold(
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
backgroundColor: Colors.lightGreen,
onPressed: () => controller.increment(),
child: const Icon(Icons.add),
),
const SizedBox(height: 16.0),
FloatingActionButton(
backgroundColor: Colors.redAccent,
onPressed: () => controller.decrement(),
child: const Icon(Icons.remove),
),
const SizedBox(height: 16.0),
FloatingActionButton(
onPressed: () => controller.refresh(),
child: const Icon(Icons.refresh),
),
],
),
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('Check out the full example in the example folder'),
Container(
margin: const EdgeInsets.only(left: 32.0, right: 32.0, bottom: 32.0),
child: Form(
key: formKey,
child: Column(
children: [
$(controller.user, (user) => Text(user.name ?? '')),
TextFormField(
onChanged: (value) => controller.onChangedName(value),
validator: (value) => controller.validateName(value),
onSaved: (newValue) => controller.onSaveName(newValue),
),
],
),
),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
$(controller.count, (count) => Text('Count $count')),
],
),
],
),
],
),
),
);
}
}
更多关于Flutter状态管理插件minimals_state_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter状态管理插件minimals_state_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 minimals_state_manager
进行状态管理的 Flutter 代码示例。minimals_state_manager
是一个轻量级的状态管理库,适用于 Flutter 应用程序。
首先,确保你已经在 pubspec.yaml
文件中添加了 minimals_state_manager
依赖:
dependencies:
flutter:
sdk: flutter
minimals_state_manager: ^latest_version # 替换为最新版本号
然后,你可以按照以下步骤使用 minimals_state_manager
进行状态管理:
-
创建状态类:
首先,定义一个状态类来存储和管理你的应用状态。这个类需要继承自
BaseModel
。import 'package:minimals_state_manager/minimals_state_manager.dart'; class CounterState extends BaseModel { int count = 0; void increment() { count++; notifyListeners(); // 通知监听者状态已更改 } }
-
创建提供器(Provider):
使用
StateProvider
包装你的状态类,并将其提供给 Flutter 组件树。import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'counter_state.dart'; // 导入你定义的状态类 void main() { runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => CounterState()), ], child: MyApp(), ), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } }
-
在组件中使用状态:
使用
Consumer
或select
函数来访问和监听状态的变化。import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter Demo Home Page'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'You have pushed the button this many times:', ), Consumer<CounterState>(builder: (context, state, child) { return Text( '${state.count}', style: Theme.of(context).textTheme.headline4, ); }), ], ), ), floatingActionButton: FloatingActionButton( onPressed: () { Provider.of<CounterState>(context, listen: false).increment(); }, tooltip: 'Increment', child: Icon(Icons.add), ), ); } }
在这个示例中,我们定义了一个 CounterState
类来管理一个计数器。我们使用 ChangeNotifierProvider
来创建并提供这个状态对象。然后,在 MyHomePage
组件中,我们使用 Consumer
来访问和监听 CounterState
的变化,并在按钮点击时更新状态。
这是一个基本的示例,展示了如何在 Flutter 中使用 minimals_state_manager
进行状态管理。你可以根据需要扩展和自定义这个示例。