Flutter: MobX和flutter_mobx状态管理器
2024-10-15 13:48:07
安装依赖
dependencies:
mobx:
flutter_mobx:
dev_dependencies:
build_runner: ^1.3.1
mobx_codegen:
编写store
/// counter.dart
import 'package:mobx/mobx.dart';
// 包含生成的文件
part 'counter.g.dart';
class Counter = _Counter with _$Counter;
// The store-class
abstract class _Counter with Store {
/// 定义state
@observable
int value = 0;
/// 定义修改state的事件
/// MobX.dart自动处理异步操作,不需要使用runInAction包装代码
@action
void increment() {
value++;
}
/// 定义计算属性
@computed
String get valueString => 'value is $value';
}
build
flutter packages pub run build_runner build // 执行一次build命令
flutter packages pub run build_runner watch // 文件更改自动打包
flutter packages pub run build_runner watch --delete-conflicting-outputs // 删除旧文件在打包
UI
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'counter.dart'; // Import the Counter
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DashPage(),
);
}
}
class DashPage extends StatefulWidget {
@override
_DashPageState createState() => _DashPageState();
}
class _DashPageState extends State<DashPage> {
int _currentIndex = 0;
final PageController _controller = PageController();
@override
Widget build(BuildContext context) {
return Scaffold(
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
currentIndex: _currentIndex,
fixedColor: Colors.purple,
onTap: (int index) {
setState(() {
_currentIndex = index;
_controller.jumpToPage(index);
});
},
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
activeIcon: Icon(Icons.home),
title: Text("Home")),
BottomNavigationBarItem(
icon: Icon(Icons.search),
activeIcon: Icon(Icons.search),
title: Text("Search")),
],
),
body: PageView(
controller: _controller,
onPageChanged: (int index) {
setState(() {
_currentIndex = index;
});
},
children: <Widget>[
HomePage(),
Center(child: Text('Search Page')),
],
),
);
}
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final counter = Counter();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('demo'),
),
body: Column(
children: <Widget>[
Observer(builder: (_) => Text(counter.value.toString())),
Observer(builder: (_) => Text(counter.valueString)),
OutlineButton(
child: Text('add'),
onPressed: counter.increment,
),
],
),
);
}
}
最新文章
- [WCF编程]12.事务:事务传播
- 2.ViewBag、ViewData、TempData之间的区别
- MySQL 1045登录失败
- [Spring MVC] - @ModelAttribute使用
- OGNL语言
- Codeforces Round #326 (Div. 2)-Duff and Meat
- Div 不换行、垂直居中等样式
- WPF中的数据模板(DataTemplate)(转)
- HDU 4628
- _BLOCK_TYPE_IS_VALID 问题解析及处理
- win7无声音显示“未插入扬声器或耳机” 怎么解决
- Android之使用JAVA占位符格式数据(很实用)
- CASE WHEN 及 SELECT CASE WHEN的用法(转)
- FastJson--阿里开源的速度最快的Json和对象转换工具
- 解析js中作用域、闭包——从一道经典的面试题开始
- MT【327】两道不等式题
- Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken
- 解决在VUE中绑定WebSocket事件无法传值的问题
- 2、LwIP协议栈规范翻译——协议层
- JS数据类型及函数的预编译
热门文章
- 哈希索引和Btree索引的比较
- how2j 仿天猫j2EE零散笔记
- 内存屏障在CPU、JVM、JDK中的实现
- JavaWeb——JSP,JSP指令,注释
- ESRI,空间数据处理,WKT,GeoJson
- C++基本之 运算符重载
- pythonchallenge总述
- Flink-v1.12官方网站翻译-P012-Stateful Stream Processing
- 2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)
- Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)【ABCD】