深入了解Flutter中StreamController的属性、方法及多种场景使用示例
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
home: StreamControllerExample(),
));
}
class StreamControllerExample extends StatefulWidget {
@override
_StreamControllerExampleState createState() => _StreamControllerExampleState();
}
class _StreamControllerExampleState extends State<StreamControllerExample> {
// 创建一个StreamController,通常与特定类型的数据一起使用
final StreamController<String> _streamController = StreamController<String>();
@override
void dispose() {
// 当State对象不再需要时,确保关闭StreamController以释放资源
_streamController.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('StreamController Example'),
),
body: Center(
child: StreamBuilder<String>(
stream: _streamController.stream, // 使用stream属性获取Stream对象
builder: (context, snapshot) {
// 根据快照中的数据,构建用户界面
if (snapshot.hasData) {
return Text(snapshot.data);
} else {
return Text('Waiting for data...');
}
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 使用sink属性向Stream添加数据
_streamController.sink.add('Hello, Stream!');
},
child: Icon(Icons.send),
),
);
}
}
这段代码创建了一个StreamController
来处理字符串类型的数据,并在StreamBuilder
的帮助下动态更新UI。当点击FloatingActionButton时,一个字符串会被添加到控制器中,并通过StreamBuilder
的snapshot
更新界面显示。最后在dispose
方法中,确保关闭了StreamController
来释放资源。
评论已关闭