【发布时间】:2021-10-05 05:55:55
【问题描述】:
在使用带有 BloC 的列表视图时,我似乎有一个错误的想法。
我有一个由 BloC (dataBloc) 填充的列表视图,该列表由 ViewBloc 排序。 当我点击该项目时,会更新 SubDataBloc 并将结果显示在列表磁贴的尾部
数据块/视图块:
- ListTileA - SubdataBlocA
- ListTileB - SubDataBlocB
- ListTileC - SubDataBlocC
当我重新排序列表时 - 只有 ListTiles 被重新排序,而不是 SubdataBloc 结果 视频: https://gitlab.com/bridystone/bloc_test/-/blob/main/BloC-ListTile.mov
整个例子在这里: https://gitlab.com/bridystone/bloc_test
任何想法,关于如何实现这一点?
ListView.builder
body: BlocBuilder<ViewBloc, ViewState>(
builder: (context, state) {
if (state is ViewInitial) {
return CircularProgressIndicator();
} else if (state is ViewReadyForUI) {
return ListView.builder(
itemCount: state.sortedData.length,
itemBuilder: (context, index) => BlocProvider(
create: (context) => SubDataBloc(),
child: MyTile(
dataItem: state.sortedData[index],
),
),
);
}
return Text('should not happen');
},
),
ListTile:
Widget build(BuildContext context) {
//BlocProvider.of<SubDataBloc>(context).add(SubDataRequest(dataItem.id));
return BlocBuilder<SubDataBloc, SubDataState>(
builder: (context, state) {
return ListTile(
leading: Text(dataItem.id.toString()),
title: Text(dataItem.text),
trailing: (state is SubDataReceived)
? Text('items: ${state.subdata.length}')
: (state is SubDataUpdating)
? Text('${state.percent}')
: Text('initial'),
onTap: () => BlocProvider.of<SubDataBloc>(context)
.add(SubDataRequest(dataItem.id)),
);
},
);
}
【问题讨论】: