StreamBuilder可以实现只对像渲染的部件进行画面的渲染,可以提升App的使用效率。
StreamBuilder主要分下面三步来进行使用。
1:定义一个StreamController
2: 将定义的SteamController放到StreamBuilder里,实现对SteamController的监控
3: 通过controller.sink往controller里面传值,当数据发生变化时,controller也会随之变化。
int _counter = 0;
// 首先要准备一个controller
final StreamController<int> controller = StreamController();
void _incrementCounter(){
_counter++;
// controller.sink可以实现向controller里面传值
controller.sink.add(_counter);
}
@override
Widget build(BuildContext context) {
print('rebuild');
return Scaffold(
appBar: AppBar(
title: const Text('next page'),
),
body: Center(
child: Column(
children: [
const Text('You have pushed this button many times'),
StreamBuilder<int>(
// 将controller的值放到streamBuilder里,实现实时监控
stream: controller.stream,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(
'${snapshot.hasData}',
style: Theme.of(context).textTheme.headlineMedium,
);
}
return Text(
'0',
style: Theme.of(context).textTheme.headlineMedium,
);
}
)
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'increment',
child: const Icon(Icons.add),
),
);
}
}