Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Listview 如何在Flatter中将列表项分组到粘性标题下_Listview_Flutter_Dart - Fatal编程技术网

Listview 如何在Flatter中将列表项分组到粘性标题下

Listview 如何在Flatter中将列表项分组到粘性标题下,listview,flutter,dart,Listview,Flutter,Dart,我正在尝试对列表项进行分组,并为每个组创建一个粘性标题。每组中的项目数量可能不同。因此,我搜索并找到了一个名为sticky_headers 0.1.8+1的包。这很酷,但它正在为每一行创建标题。我找不到将类似项目分组到同一标题下的方法。这是我的密码 class FixtureList extends StatelessWidget { final dateFormat = DateFormat('MMMd'); final timeFormat = DateFormat('Hm');

我正在尝试对列表项进行分组,并为每个组创建一个粘性标题。每组中的项目数量可能不同。因此,我搜索并找到了一个名为sticky_headers 0.1.8+1的包。这很酷,但它正在为每一行创建标题。我找不到将类似项目分组到同一标题下的方法。这是我的密码

class FixtureList extends StatelessWidget {
  final dateFormat = DateFormat('MMMd');
  final timeFormat = DateFormat('Hm');

  @override
  Widget build(BuildContext context) {
    return Consumer<FixtureData>(
      builder: (context, fixtureData, child) {
        return ListView.builder(
          scrollDirection: Axis.vertical,
          shrinkWrap: true,
          itemBuilder: (context, index) {
            final fixture = fixtureData.fixtures[index];

            return StickyHeader(
              header: Container(
                height: 30.0,
                color: Colors.lightBlueAccent,
                padding: EdgeInsets.symmetric(horizontal: 8.0),
                alignment: Alignment.centerLeft,
                child: Text(
                  dateFormat.format(fixture.dateTime.toLocal()),
                  style: const TextStyle(color: Colors.black),
                ),
              ),
              content: FixtureTile(
                date: dateFormat.format(fixture.dateTime.toLocal()),
                time: timeFormat.format(fixture.dateTime.toLocal()),
                homeTeam: fixture.homeTeam,
                awayTeam: fixture.awayTeam,
                homeOdds: fixture.homeOdds,
                drawOdds: fixture.drawOdds,
                awayOdds: fixture.awayOdds,
                isHomeSelected: fixture.homeSelected,
                isDrawSelected: fixture.drawSelected,
                isAwaySelected: fixture.awaySelected,
                homeCallBack: () =>
                    fixtureData.updateSelection(fixture, 'home'),
                drawCallBack: () =>
                    fixtureData.updateSelection(fixture, 'draw'),
                awayCallBack: () =>
                    fixtureData.updateSelection(fixture, 'away'),
              ),
            );
          },
          itemCount: fixtureData.fixtures.length,
        );
      },
    );
  }
}
class FixtureList扩展了无状态小部件{
最终日期格式=日期格式(“MMMd”);
最终时间格式=日期格式(“Hm”);
@凌驾
小部件构建(构建上下文){
退货消费者(
生成器:(上下文、fixtureData、子级){
返回ListView.builder(
滚动方向:轴垂直,
收缩膜:对,
itemBuilder:(上下文,索引){
最终夹具=夹具数据。夹具[索引];
回程粘性收割台(
标题:容器(
身高:30.0,
颜色:Colors.lightBlueAccent,
填充:边缘组。对称(水平:8.0),
对齐:alignment.centerLeft,
子:文本(
dateFormat.format(fixture.dateTime.toLocal()),
样式:const TextStyle(颜色:Colors.black),
),
),
内容:FixtureTile(
日期:dateFormat.format(fixture.dateTime.toLocal()),
时间:timeFormat.format(fixture.dateTime.toLocal()),
主队:fixture.homeTeam,
awayTeam:fixture.awayTeam,
homeOdds:fixture.homeOdds,
抽签赔率:fixture.抽签赔率,
awayods:fixture.awayods,
isHomeSelected:fixture.homeSelected,
isDrawSelected:fixture.drawSelected,
isAwaySelected:fixture.awaySelected,
homeCallBack:()=>
fixtureData.updateSelection(fixture'home'),
drawCallBack:()=>
fixtureData.updateSelection(夹具“绘制”),
awayCallBack:()=>
fixtureData.updateSelection(fixture'away'),
),
);
},
itemCount:fixtureData.fixtures.length,
);
},
);
}
}

请检查下面使用插件的示例

导入“包装:颤振/材料.省道”;
导入“包:颤振_粘性_头/颤振_粘性_头.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:ThemeData.dark()
.copyWith(scaffoldBackgroundColor:Color.fromARGB(255,18,32,47)),
debugShowCheckedModeBanner:false,
主页:主页(),
);
}
}
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:ListExample()
);
}
}
类ListExample扩展了无状态小部件{
常量列表示例({
关键点,
}):super(key:key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
标题:“列表示例”,
条子:[
_StickyHeaderList(索引:0),
_粘贴头列表(索引:1),
_粘贴头列表(索引:2),
_粘贴头列表(索引:3),
],
);
}
}
类_StickyHeaderList扩展了无状态小部件{
const_StickyHeaderList({
关键点,
这个索引,,
}):super(key:key);
最终整数指数;
@凌驾
小部件构建(构建上下文){
回程滑道头(
标题:标题(索引:索引),
银条:银条列表(
代表:SliverChildBuilderDelegate(
(上下文,i)=>
列表砖(
领先:CircleAvatar(
子项:文本(“$index”),
),
标题:文本('List tile#$i'),
),
儿童人数:6,
),
),
);
}
}
类头扩展了无状态小部件{
常数头({
关键点,
这个索引,,
这个名字,
this.color=Colors.lightBlue,
}):super(key:key);
最后的字符串标题;
最终整数指数;
最终颜色;
@凌驾
小部件构建(构建上下文){
返回容器(
身高:60,
颜色:颜色,
填充:边缘组。对称(水平:16.0),
对齐:alignment.centerLeft,
子:文本(
标题??“标题#$index”,
样式:const TextStyle(颜色:Colors.white),
),
);
}
}
类AppScaffold扩展了无状态小部件{
施工脚手架({
关键点,
@需要这个标题,
@需要这个,条子,
this.reverse=false,
}):super(key:key);
最后的字符串标题;
最后列出细条;
最终布尔倒转;
@凌驾
小部件构建(构建上下文){
返回默认StickyHeaderController(
孩子:脚手架(
appBar:appBar(
标题:文本(标题),
),
正文:自定义滚动视图(
条子:条子,
反向:反向,
),
),
);
}
}
您可以根据自己的条件创建一个
切片数组。


请检查下面使用插件的示例

导入“包装:颤振/材料.省道”;
导入“包:颤振_粘性_头/颤振_粘性_头.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:ThemeData.dark()
.copyWith(scaffoldBackgroundColor:Color.fromARGB(255,18,32,47)),
debugShowCheckedModeBanner:false,
主页:主页(),
);
}
}
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:ListExample()
class FixtureList extends StatelessWidget {
    final dateFormat = DateFormat('MMMd');
    final timeFormat = DateFormat('Hm');

    @override
    Widget build(BuildContext context) {
    return Consumer<FixtureData>(
      builder: (context, fixtureData, child) {
        return GroupedListView<FixtureData, string>(
          scrollDirection: Axis.vertical,
          shrinkWrap: true,
          groupBy: (fixture) => // return the value by which the fixtures should be grouped,
          groupSeparatorBuilder: (String groupByValue) {
            // your widget for group headers here
          },
          itemBuilder: (context, fixture) {
            // your widget for items here
          },
          elements: fixtureData.fixtures, // instead of itemCount here the list of objects is passed
        );
      },
    );
  }
}