安装依赖

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,
),
],
),
);
}
}

最新文章

  1. [WCF编程]12.事务:事务传播
  2. 2.ViewBag、ViewData、TempData之间的区别
  3. MySQL 1045登录失败
  4. [Spring MVC] - @ModelAttribute使用
  5. OGNL语言
  6. Codeforces Round #326 (Div. 2)-Duff and Meat
  7. Div 不换行、垂直居中等样式
  8. WPF中的数据模板(DataTemplate)(转)
  9. HDU 4628
  10. _BLOCK_TYPE_IS_VALID 问题解析及处理
  11. win7无声音显示“未插入扬声器或耳机” 怎么解决
  12. Android之使用JAVA占位符格式数据(很实用)
  13. CASE WHEN 及 SELECT CASE WHEN的用法(转)
  14. FastJson--阿里开源的速度最快的Json和对象转换工具
  15. 解析js中作用域、闭包——从一道经典的面试题开始
  16. MT【327】两道不等式题
  17. Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken
  18. 解决在VUE中绑定WebSocket事件无法传值的问题
  19. 2、LwIP协议栈规范翻译——协议层
  20. JS数据类型及函数的预编译

热门文章

  1. 哈希索引和Btree索引的比较
  2. how2j 仿天猫j2EE零散笔记
  3. 内存屏障在CPU、JVM、JDK中的实现
  4. JavaWeb——JSP,JSP指令,注释
  5. ESRI,空间数据处理,WKT,GeoJson
  6. C++基本之 运算符重载
  7. pythonchallenge总述
  8. Flink-v1.12官方网站翻译-P012-Stateful Stream Processing
  9. 2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)
  10. Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)【ABCD】