我的 Flutter 应用程序中有一个屏幕专门用于编辑对象列表。当您按下编辑按钮时,会弹出一个模式,允许您编辑对象值。当您关闭模型时,列表会通过 BLoC 刷新。但是,当调用刷新列表的方法时,什么也没有发生。
bloc.dart
class Bloc {
final _provider = ModelProvider();
final _controller = StreamController<List<Model>>();
Stream<List<Model>> get models => _controller.stream;
void getModels() async {
final List<Model> models = await _provider.readAll();
_controller.sink.add(models);
}
Future<int> saveModel(Model model) async {
final int id = await _provider.write(model);
return id;
}
}
list_screen.dart
class ListScreen extends StatelessWidget {
final bloc = Bloc();
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
slivers: <Widget>[
// SliverAppBar ...
StreamBuilder<List<Model>>(
stream: bloc.models,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) =>
ListTile(
title: Text(snapshot.data[index].name),
onPressed: () => _editModel(context),
),
),
} else {
bloc.getModels();
return Container();
}
}
),
],
),
);
}
void _editModel(BuildContext context) async {
final Model edited = await showDialog(
context: context,
builder: (context) => EditModal(),
);
if (edited != null) {
await bloc.saveModel(edited);
bloc.getModels();
}
}
}
我知道数据已正确存储在数据库中,因为如果我转到上一个屏幕然后返回到编辑屏幕,数据就会更新。谁能帮我弄清楚为什么StreamBuilder
不重建?