手机网站建站cms,nginx wordpress,上海松江网站制作,wordpress 统计ip1.说明
无意间发现了一个好用的库rxdart#xff0c;它为 Dart 的 Stream 添加了额外的功能。
2.功能
#xff08;1#xff09;合并多个流Stream
借助Rx.combineLatest2()合并两个流stream1和stream2。 注意#xff1a;如果dart文件中同时使用了getx#xff0c;需要隐…1.说明
无意间发现了一个好用的库rxdart它为 Dart 的 Stream 添加了额外的功能。
2.功能
1合并多个流Stream
借助Rx.combineLatest2()合并两个流stream1和stream2。 注意如果dart文件中同时使用了getx需要隐藏掉Rx否则会冲突。
import dart:async;import package:flutter/material.dart;
import package:rxdart/rxdart.dart;
// import package:get/get.dart hide Rx;// Library: rxdart , v0.28.0
// 为 Dart 的 Stream 添加了额外的功能
// 合并多个流 CombineLatestStream// Publisher: fluttercommunity.devclass RxdartDemo extends StatefulWidget {const RxdartDemo({super.key});overrideStateRxdartDemo createState() _RxdartDemoState();
}class _RxdartDemoState extends StateRxdartDemo {//热重载报错 Unhandled Exception: Bad state: Stream has already been listened to.// 解决更改为广播流broadcast。StreamControllerString streamController1 StreamControllerString.broadcast();late StreamString stream1;StreamControllerint streamController2 StreamControllerint.broadcast();late Streamint stream2;StreamControllerListint streamController3 StreamControllerListint.broadcast();late StreamListint stream3;overridevoid initState() {super.initState();stream1 streamController1.stream;streamController1.add(A);stream2 streamController2.stream;streamController2.add(1);stream3 streamController3.stream;streamController3.add([1, 2]);}overridevoid dispose() {streamController1.close();streamController2.close();streamController3.close();super.dispose();}// Rx.combineLatest2 将两个Stream流合并StreamString get streamCombined Rx.combineLatest2(stream1, stream2, (a, b) $a - $b);overrideWidget build(BuildContext context) {return Scaffold(body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [const Text(单个流Stream,style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),),const SizedBox(height: 12,),StreamBuilderListint(stream: stream3,builder: (context, snapshot) {return Text(${snapshot.data},style: const TextStyle(fontSize: 16),);}),const SizedBox(height: 12,),const Text(合并多个流Stream,style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),),const SizedBox(height: 12,),StreamBuilderString(stream: streamCombined,builder: (context, snapshot) {return Text(snapshot.data ?? empty,style: const TextStyle(fontSize: 16),);}),TextButton(onPressed: () {streamController1.add(b);streamController2.add(2);streamController3.add([3, 4]);},child: const Text(Change,style: TextStyle(fontSize: 16, color: Colors.blue),))],),),);}
}