我想我不能理解Fflight中的多提供者,它是如何工作的.
我想分享两个版本的MyTabs类,你可以在下面看到它们. 第二个版本的问题是,只有当 Select 第三个选项卡时才会监听流,但在第一个版本的MyTabs类中我不需要这样做,它会自动监听流,而不 Select 第三个选项卡.
import 'dart:async';
class StreamData {
final StreamController<int> _valueStreamController = StreamController<int>();
late Stream<int> valueStream;
int _counter = 0;
Stream<int> get myStream => _valueStreamController.stream;
int get streamCount => _counter;
StreamData() {
valueStream = _valueStreamController.stream;
_startTimer();
}
void _startTimer() {
Timer.periodic(Duration(seconds: 1), (timer) {
_counter++;
_valueStreamController.add(_counter);
});
}
void dispose() {
_valueStreamController.close();
}
}
第一个版本
class MyTabs extends StatelessWidget {
MyTabs({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final Stream<int> myStream = StreamData().myStream;
return DefaultTabController(
length: 3,
child: MultiProvider(
providers: [
StreamProvider<int>(
create: (context) => myStream,
initialData: 0,
),
],
child: Scaffold(
appBar: AppBar(
title: const Text('Tab Demo'),
bottom: const TabBar(
tabs: <Widget>[
Tab(text: 'First'),
Tab(text: 'Second'),
Tab(text: 'Third'),
],
),
),
body: const TabBarView(
children: <Widget>[
FirstScreen(),
SecondScreen(),
ThirdScreen(),
],
),
),
),
);
}
}
第二版
class MyTabs extends StatelessWidget {
MyTabs({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 3,
child: MultiProvider(
providers: [
StreamProvider<int>(
create: (context) => StreamData().myStream,
initialData: 0,
),
],
child: Scaffold(
appBar: AppBar(
title: const Text('Tab Demo'),
bottom: const TabBar(
tabs: <Widget>[
Tab(text: 'First'),
Tab(text: 'Second'),
Tab(text: 'Third'),
],
),
),
body: const TabBarView(
children: <Widget>[
FirstScreen(),
SecondScreen(),
ThirdScreen(),
],
),
),
),
);
}
}
我搞不懂多Provider 和数据流是如何工作的.