这通常是由于在更改列表后未将更改发送到BLoC的状态中引起的。以下是一种可能的
在您的BLoC中,您需要使用StreamController来控制状态更改:
class MyBloc extends Bloc {
StreamController> _listController = StreamController>();
Stream> get listStream => _listController.stream;
void updateList(List updatedList) {
_listController.sink.add(updatedList);
}
@override
void dispose() {
_listController.close();
super.dispose();
}
}
现在,在您的视图中,您需要使用StreamBuilder以及你的BLoC的listStream来构建您的列表,您也需要使用BlocBuilder以及更新的状态来刷新您的UI:
class MyView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocBuilder(
builder: (context, state) {
return StreamBuilder>(
stream: BlocProvider.of(context).listStream,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}
final myItemList = snapshot.data;
return ListView.builder(
itemCount: myItemList.length,
itemBuilder: (context, index) {
final myItem = myItemList[index];
return Text(myItem.title);
},
);
},
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
final bloc = BlocProvider.of(context);
final updatedList = [
MyItem('New item1'),
MyItem('New item2'),
MyItem('New item3'),
];
bloc.updateList(updatedList);
},
),
);
}
}
现在,当您通过点击您的FloatingActionButton更改列表时,您的UI应该会刷新并显示新的列表项。