Flutter 在动态构建的具有无限滚动的颤振GridView中插入节标题

Flutter 在动态构建的具有无限滚动的颤振GridView中插入节标题,flutter,flutter-layout,Flutter,Flutter Layout,有没有一种简单的方法可以将节标题插入到具有无限滚动的动态构建的GridView中 我的数据来自API,格式如下: [{“id”:1,“内容”:“野马”,“类别”:“汽车”},{“id”:2,“内容”:“卡马罗”,“类别”:“汽车”{“id”:3,“内容”:“运动夹克”,“类别”:“卡车”},{“id”:4,“内容”:“塔霍”,“类别”:“卡车”}] 我可以一次提取20个项目并将其插入GridView,但是我希望在类别更改时输入部分标题。例如,从汽车到卡车。是否有一种简单的方法可以在grid Vi

有没有一种简单的方法可以将节标题插入到具有无限滚动的动态构建的GridView中

我的数据来自API,格式如下:

[{“id”:1,“内容”:“野马”,“类别”:“汽车”},{“id”:2,“内容”:“卡马罗”,“类别”:“汽车”{“id”:3,“内容”:“运动夹克”,“类别”:“卡车”},{“id”:4,“内容”:“塔霍”,“类别”:“卡车”}]

我可以一次提取20个项目并将其插入GridView,但是我希望在类别更改时输入部分标题。例如,从汽车到卡车。是否有一种简单的方法可以在grid View中插入标题,或者是否需要将每个类别映射到其自己的列表?以下是我目前正在使用的方法

Widget build(BuildContext context) {
    return BlocBuilder<PostBloc, PostState>(
      builder: (context, state) {
        if (state is PostInitial) {
          return Center(
            child: CircularProgressIndicator(),
          );
        }
        if (state is PostFailure) {
          return Center(
            child: Text('failed to fetch posts'),
          );
        }
        if (state is PostSuccess) {
          if (state.posts.isEmpty) {
            return Center(
              child: Text('no posts'),
            );
          }
          return GridView.builder(
            padding: const EdgeInsets.all(10.0),
            itemBuilder: (BuildContext context, int index) {

              return index >= state.posts.length
                  ? BottomLoader()
                  : GridWidget(post: state.posts[index]);
            },
            itemCount: state.hasReachedMax
                ? state.posts.length
                : state.posts.length + 1,
            controller: _scrollController,
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
              crossAxisCount: 2,
              childAspectRatio: 2 / 3,
              crossAxisSpacing: 10,
              mainAxisSpacing: 10,
            ),
          );
        }
      },
    );
  }
小部件构建(构建上下文){
返回BlocBuilder(
生成器:(上下文、状态){
如果(状态为初始后){
返回中心(
子对象:CircularProgressIndicator(),
);
}
if(状态为PostFailure){
返回中心(
子项:Text('failed to fetch posts'),
);
}
如果(状态为PostSuccess){
if(state.posts.isEmpty){
返回中心(
child:Text('no posts'),
);
}
返回GridView.builder(
填充:常数边集全部(10.0),
itemBuilder:(构建上下文,int索引){
返回索引>=state.posts.length
?底部装载机()
:GridWidget(post:state.posts[index]);
},
itemCount:state.HasReacheMax
?状态、位置、长度
:state.posts.length+1,
控制器:\ u滚动控制器,
gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(
交叉轴计数:2,
儿童比例:2/3,
横轴间距:10,
平均间距:10,
),
);
}
},
);
}