import ‘package:flutter/material.dart‘; import ‘package:rxdart/rxdart.dart‘; import ‘package:flutter/widgets.dart‘; //import ‘package:flutter_mvvm/core/viewmodel_provider.dart‘; //import ‘package:flutter_mvvm/page/home/viewmodel_home.dart‘; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: ‘Flutter MVVM Demo‘, theme: ThemeData( primarySwatch: Colors.blue, ), home: HomePage(), ); } } class HomePage extends StatefulWidget{ @override State<StatefulWidget> createState() { // TODO: implement createState return HomePageState(); } } class HomePageState extends State<HomePage> { DataBloc dataBloc = DataBloc(); _showDialog(){ showDialog(context: context, builder: (_){ return SimpleDialog( title: Text(‘dialog‘), children: <Widget>[ StreamBuilder( stream: dataBloc.dataBloc.stream, builder: (context, snapshot){ if(snapshot.hasData){ var data = snapshot.data; return Container( child: Text(‘$data‘), ); }else{ return Text(‘pending..‘); } }, ), ], ); }); } @override Widget build(BuildContext context) { dataBloc.get1String(); dataBloc.get2String(); return Scaffold( appBar: AppBar(title: Text(‘test‘),), body: Container( child: Column( children: <Widget>[ StreamBuilder( stream: dataBloc.dataBloc.stream, builder: (context, snapshot){ if(snapshot.hasData){ return Text(‘from 1: ${snapshot.data}‘); }else{ return Text(‘no data from 1‘); } }, ), StreamBuilder( stream: dataBloc.data2Bloc.stream, builder: (context, snapshot){ if(snapshot.hasData){ return Text(‘from 2: ${snapshot.data}‘); }else{ return Text(‘no data from 2‘); } }, ), ], ), ), ); } } class DataBloc { // PublishSubject dataBloc = PublishSubject(); ReplaySubject dataBloc = ReplaySubject(); ReplaySubject data2Bloc = ReplaySubject(); DataBloc(){ dataBloc.listen(onData); } get1String()async{ for(int i=0; i<10; i++){ dataBloc.add(i); await Future.delayed(Duration(seconds: 1)); } } get2String()async{ for(int i=0; i<10; i++){ data2Bloc.add(i*100); await Future.delayed(Duration(seconds: 1)); } } void onData(value){ } }
原文:https://www.cnblogs.com/pythonClub/p/10792324.html