Rxdart的简单使用
RxDart是一个响应式编程思维的实现,学习的时候发现网上很多都是有关于RxDart中几种不同类型Subject的介绍,并没有我想要的实战代码,于是自己尝试,实现了不同页面监听并传递数据的效果。
关于不同类型Subject的介绍大家自行百度。
先添加依赖
rxdart: ^0.25.0
然后创建RXdart的工具类
PublishSubject<> 放什么数据类型都可以哦
class RxUtil {
static final subject = PublishSubject<String>();
}
这个时候就可以在需要被观察的地方调用 subject.add() 发送数据了
class DemoPage extends StatefulWidget {
@override
_DemoPageState createState() => _DemoPageState();
}
class _DemoPageState extends State<DemoPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
child: Text("Hollow flutter"),
onPressed: (){
RxUtil.subject.add("Hollow flutter");
Navigator.pop(context);
},
),
),
);
}
}
最后一步就是注册实现监听了
class _MyHomePageState extends State<MyHomePage> {
String content="Hollow Rxdart";
@override
void dispose() {
super.dispose();
RxUtil.subject?.close();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text(content),
onPressed: (){
//实现监听
RxUtil.subject.stream.listen((data) => setState(() {
print("******************"+data);
content=data;
}));
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
return DemoPage();//构造函数传递参数
}));
}
)
],
),
),
);
}
}
注意在不需要监听的时候及时关闭监听 subject.close()
至此就实现了利用RXdart不同页面监听并传值的效果,大家可以复制代码运行一下看看效果。
使用起来还是比较简单的,至于RXdart中更复杂的功能,以后慢慢学习。