Flutter 参数类型';BlocBuilder<;动态,动态>';can';不能分配给参数类型';SliverChildDelegate';
我需要将数据从BlocBuilder加载到SliverGrid,以显示项目网格 当我使用BlocBuilder作为SliverGrid的委托时,会出现以下错误: 无法将参数类型“BlocBuilder”分配给 参数类型“SliverChildDelegate” 我能做什么 这是我的代码示例:Flutter 参数类型';BlocBuilder<;动态,动态>';can';不能分配给参数类型';SliverChildDelegate';,flutter,bloc,flutter-sliver,flutter-bloc,Flutter,Bloc,Flutter Sliver,Flutter Bloc,我需要将数据从BlocBuilder加载到SliverGrid,以显示项目网格 当我使用BlocBuilder作为SliverGrid的委托时,会出现以下错误: 无法将参数类型“BlocBuilder”分配给 参数类型“SliverChildDelegate” 我能做什么 这是我的代码示例: SliverGrid( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( cros
SliverGrid(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 8,
mainAxisSpacing: 8,
),
delegate: BlocBuilder<SubjectBloc, SubjectState>(
builder: (context, state) {
return SliverChildBuilderDelegate(
(
BuildContext context,
int index,
) {
return Text('$index');
},
);
},
),
),
SliverGrid(
gridDelegate:const SliverGridDelegateWithFixedCrossAxisCount(
交叉轴计数:2,
横轴间距:8,
平均间距:8,
),
代表:BlocBuilder(
生成器:(上下文、状态){
回程滑动门(
(
构建上下文上下文,
整数索引,
) {
返回文本(“$index”);
},
);
},
),
),
试试这个:
SliverGrid(
gridDelegate:const SliverGridDelegateWithFixedCrossAxisCount(
交叉轴计数:2,
横轴间距:8,
平均间距:8,
),
代表:SliverChildBuilderDelegate(
(BuildContext上下文,int索引){
返回BlocBuilder(
生成器:(上下文、状态){
//从这里返回小部件。
返回文本(“$index”);
},
);
},
),
),
编辑1
或者这个:
BlocBuilder(
生成器:(上下文、状态){
回程缝栅(
//请根据数据指定计数
//来自BlocBuilder。
儿童人数:20,
gridDelegate:const SliverGridDelegateWithFixedCrossAxisCount(
交叉轴计数:2,
横轴间距:8,
平均间距:8,
),
代表:SliverChildBuilderDelegate(
(BuildContext上下文,int索引){
返回文本(“$index”);
},
),
},
);
),
我就是这样做的。如果你知道更好的解决方案,请告诉我
SliverList(
delegate: SliverChildListDelegate(
[
BlocBuilder<SampleCubit, SampleState>(
builder: (context, state) => (state is SampleLoaded)
? GridView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: state.userList.length,
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 4,
mainAxisSpacing: 4,
),
itemBuilder: (BuildContext context, int index) {
return Text('$index');
},
)
: Text(
'str_noItemFound'.tr,
),
)
],
),
),
SliverList(
委托:SliverChildListDelegate(
[
BlocBuilder(
生成器:(上下文,状态)=>(状态为SampleLoaded)
?GridView.builder(
收缩膜:对,
物理学:const NeverScrollableScrollPhysics(),
itemCount:state.userList.length,
gridDelegate:
常量SliverGridDelegateWithFixedCrossAxisCount(
交叉轴计数:2,
横轴间距:4,
主轴间距:4,
),
itemBuilder:(构建上下文,int索引){
返回文本(“$index”);
},
)
:文本(
“str_noItemFound”.tr,
),
)
],
),
),
Ok。因此,您需要将SliverChildBuilderDelegate
传递给SliverGrid
的delegate
属性。现在,您希望区块构建器返回一个小部件。我将在下面回答这个问题。BlocBuilder返回一个列表,我想在此基础上构建SilverGrid!在您的示例中,我无法控制SilverGrid itemCount。您能描述一下您到底需要什么吗?因为SliverGrid有许多不同的用途。另外,如果您已经确定了ItemCount,那么这会更好。或者,我也将给出当前答案的替代答案。也许,这会有帮助。如果它有效,对你有好处,如果没有,那么使用我的第二个解决方案。它应该能用。@PreetShah我在CustomScrollView中有复杂的银牌!一个SilverAppBar、一个包含项目的SilverList和一个SilverGrid不希望为新数据列表重建所有这些复杂的小部件树!嗯,你必须做出选择。请参见,您的小部件取决于块上的数据。因此,为了构建内容,您必须等待数据。就性能而言,这是不可取的。但事实就是这样。