Flutter插件aber的介绍与使用方法详解
Flutter插件aber的介绍与使用方法详解
特性 Features
Aber 是一个使用起来非常简洁、性能非常高效的状态管理包。类似响应式 ,但并没有使用ChangeNotifier或StreamSubscription。
简洁:concise
- 使用易上手、只需非常简单及少量的代码即可管理状态。
- 源码非常少,非常便于深入理解源码。
- 没有任何依赖其他包。
高效:efficient
- 采用了一种特殊绑定方式,只有改变了状态的 widget 才会被重建,并且是自动重建所有改变了状态的 widget。
- 一种类似响应式方案,但没有使用任何 ChangeNotifier、StreamSubscription,大大提高了性能。
借鉴了 Get 包的思想: Borrowing ideas from the Get package
- 利用 dart 的扩展函数特性。
- 借鉴了其 put/find/GetBuilder 等的想法。
- 和 Get 类似,Aber 的状态管理既可以单独使用,也可以与其他状态管理器结合使用。
比 Get 更好:
- 相比 Get
.obs
的响应式编程,Aber 使用了.ab
,但没有使用 StreamSubscription,便实现了类似响应式的工作。 - 相比 Get
GetBuilder(id:'text'')
利用 id 的方式重建,Aber 使用了abw
传递的方式(后面会讲解),真正做到了当状态被改变时,会自动寻找到并尝试重建引用了这个状态的所有 widget。
开始使用 Getting started
以下是使用 Aber 进行状态管理的步骤:
-
创建一个 controller:
import 'package:aber/Aber.dart'; class DemoController extends AbController {}
-
只需对想要观察的属性后加上
.ab
:final count = 0.ab;
-
构建一个
AbWidget
:import 'package:aber/Aber.dart'; class A extends StatelessWidget { [@override](/user/override) Widget build(BuildContext context) { return Scaffold( body: AbWidget( ... ), ); } }
-
使用
AbWidget
包裹:AbWidget<DemoController>( controller: DemoController(), builder: (DemoController controller, Abw<DemoController> abw) { return Text(controller.count.get(abw).toString()); }, )
没错,就是这么简单,使用变量时,只需在变量后面添加
.get(abw)
。 -
在任意地方都可以修改变量:
Aber.find<DemoController>().count.refreshEasy((oldValue) => oldValue + 1)
就是这么简单,只需这一行,便可把所有引用该
count
变量的AbWidget
进行重建!
有多种更新状态方式(全是伪响应式):refreshEasy
, refreshComplex
, modify
, modifyComplex
等,可以细看源码描述哦!
完整示例 Demo
import 'package:flutter/material.dart';
import 'package:aber/Aber.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final DemoController _controller = DemoController();
void _incrementCounter() {
Aber.find<DemoController>().count.refreshEasy((oldValue) => oldValue + 1);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Aber Example"),
),
body: AbWidget<DemoController>(
controller: _controller,
builder: (DemoController controller, Abw<DemoController> abw) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'${controller.count.get(abw)}',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
更多关于Flutter插件aber的介绍与使用方法详解的实战教程也可以访问 https://www.itying.com/category-92-b0.html