Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Flutter 通过引用颤振中的另一个列表来过滤列表_Flutter_Dart - Fatal编程技术网

Flutter 通过引用颤振中的另一个列表来过滤列表

Flutter 通过引用颤振中的另一个列表来过滤列表,flutter,dart,Flutter,Dart,我有两个列表,一个是存储汽车类别(如SUV、轿车、小型货车等)。 第二个列表存储了汽车的所有细节,它也包含了汽车类别 我使用嵌套的listview,其中第一个listview以垂直方式显示汽车类别,在它内部,我想以水平方式显示汽车属于同一类别的详细信息 下面是代码片段: ListView.builder( //This is First list with only Category name

我有两个列表,一个是存储汽车类别(如SUV、轿车、小型货车等)。 第二个列表存储了汽车的所有细节,它也包含了汽车类别

我使用嵌套的listview,其中第一个listview以垂直方式显示汽车类别,在它内部,我想以水平方式显示汽车属于同一类别的详细信息

下面是代码片段:

 ListView.builder(                                         //This is First list with only Category name
                             shrinkWrap: true,
                         scrollDirection: Axis.vertical,
                          itemCount: categoriesOnlyList.length,
                     itemBuilder: (context, index1) {
                           return
                             Column(
                               crossAxisAlignment: CrossAxisAlignment.start,
                               children: [
                                 Padding(
                                   padding: const EdgeInsets.all(8.0),
                                   child: Container(
                                     margin: EdgeInsets.only(left: 20),
                                     child: Text(
                                       categoriesOnlyList[index1].Name,
                                       textAlign: TextAlign.start,
                                       style: TextStyle(color: Colors.white70,
                                           fontWeight: FontWeight.bold,
                                           fontSize: 18),
                                     ),
                                   ),
                                 ),
                       Container(
                                height: 300,
                                decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(8),
                             ),
                                child: ListView.builder(             //This the Second List with all details.
                                  shrinkWrap: true,
                                    itemCount: categoryItemList.length,
                                    scrollDirection: Axis.horizontal,
                                    itemBuilder: (context,index){
                                    return categoriesOnlyList[index1].Name==categoryItemList[index].CategoryName
                                          && categoryItemList[index].ID.startsWith("105")?     // Here I'm applying condition
                                      Padding(
                                        padding: const EdgeInsets.all(20.0),
                                        child: Padding(
                                          padding: const EdgeInsets.all(8.0),
                                          child: Text(categoryItemList[index].Name,style: TextStyle(color: Colors.white70),),
                                        ),
                                      ):Container();
                                }),
                              )

                               ],
                             );

                      }),
这就是我想要实现的目标:

不知何故,我能够通过上面的代码实现这一点,但在水平滚动项目方面面临另一个问题,请在下面给出的链接上提问


.

据我所知,这可能会解决您的问题:

class MyHomePage extends StatelessWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  final list = [
    'BMW',
    'Toyota',
    'Testa',
    'Ford',
    'Fiat',
    'BMW',
    'Toyota',
    'Testa',
    'Ford',
    'Fiat'
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text(title)),
        body: ListView.builder(
          itemCount: 20,
          itemBuilder: (_, __) {
            return SizedBox(
              width: double.infinity,
              height: 60,
              child: ListView.builder(
                scrollDirection: Axis.horizontal,
                itemBuilder: (context, index) {
                  return Padding(
                    padding: const EdgeInsets.all(16),
                    child: Text(list[index]),
                  );
                },
                itemCount: list.length,
              ),
            );
          },
        ));
  }
}
更新(1) 下面是显示这些组的完整颤振代码:

class Car {
  final String company;
  final String category;

  Car(this.company, this.category);
}

class MyHomePage extends StatelessWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  final list = [
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
  ];

  Map<String, List<Car>> groupedLists = {};

  void groupMyList() {
    list.forEach((car) {
      if (groupedLists['${car.category}'] == null) {
        groupedLists['${car.category}'] = <Car>[];
      }

      groupedLists['${car.category}'].add(car);
    });
  }

  @override
  Widget build(BuildContext context) {
    groupMyList();

    return Scaffold(
      appBar: AppBar(title: Text(title)),
      body: ListView(
        children: [
          for (var entry in groupedLists.entries)
            SizedBox(
              width: double.infinity,
              height: 60,
              child: ListView.builder(
                itemCount: entry.value.length,
                scrollDirection: Axis.horizontal,
                itemBuilder: (context, index) {
                  return Padding(
                    padding: const EdgeInsets.all(16),
                    child: Text(entry.value[index].company),
                  );
                },
              ),
            ),
        ],
      ),
    );
  }
}
等级车{
最终字符串公司;
最终字符串类别;
汽车(本公司、本类别);
}
类MyHomePage扩展了无状态小部件{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
最终名单=[
汽车(“Toyata”、“SUV”),
汽车(“宝马”、“轿车”),
汽车(“特斯拉”、“SUV”),
汽车(“Toyata”、“SUV”),
汽车(“宝马”、“轿车”),
汽车(“特斯拉”、“SUV”),
汽车(“Toyata”、“SUV”),
汽车(“宝马”、“轿车”),
汽车(“特斯拉”、“SUV”),
汽车(“Toyata”、“SUV”),
汽车(“宝马”、“轿车”),
汽车(“特斯拉”、“SUV”),
汽车(“Toyata”、“SUV”),
汽车(“宝马”、“轿车”),
汽车(“特斯拉”、“SUV”),
汽车(“Toyata”、“SUV”),
汽车(“宝马”、“轿车”),
汽车(“特斯拉”、“SUV”),
汽车(“Toyata”、“SUV”),
汽车(“宝马”、“轿车”),
汽车(“特斯拉”、“SUV”),
汽车(“Toyata”、“SUV”),
汽车(“宝马”、“轿车”),
汽车(“特斯拉”、“SUV”),
];
映射GroupedList={};
void groupMyList(){
列表。每辆车((车){
if(GroupedList['${car.category}']==null){
GroupedList['${car.category}']=[];
}
GroupedList['${car.category}'].add(car);
});
}
@凌驾
小部件构建(构建上下文){
groupMyList();
返回脚手架(
appBar:appBar(标题:文本(标题)),
正文:ListView(
儿童:[
for(GroupedList.entries中的var条目)
大小盒子(
宽度:double.infinity,
身高:60,
子项:ListView.builder(
itemCount:entry.value.length,
滚动方向:轴水平,
itemBuilder:(上下文,索引){
返回填充(
填充:常量边集。全部(16),
子项:文本(entry.value[index].company),
);
},
),
),
],
),
);
}
}

事实上这不是我想要的,您还没有比较列表。它们是两个列表。我的主要问题是筛选列表。你的意思是这个问题基本上与飞镖而非颤振有关,并且你有一个不同类别的汽车列表,你想对它们进行筛选/分组吗?是的,我完全想要相同的。如果答案正确,请查看更新的答案=D
{
SUV: [Instance of 'Car', Instance of 'Car'], 
SEDAN: [Instance of 'Car']
}
class Car {
  final String company;
  final String category;

  Car(this.company, this.category);
}

class MyHomePage extends StatelessWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  final list = [
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
    Car('Toyata', 'SUV'),
    Car('BMW', 'SEDAN'),
    Car('Tesla', 'SUV'),
  ];

  Map<String, List<Car>> groupedLists = {};

  void groupMyList() {
    list.forEach((car) {
      if (groupedLists['${car.category}'] == null) {
        groupedLists['${car.category}'] = <Car>[];
      }

      groupedLists['${car.category}'].add(car);
    });
  }

  @override
  Widget build(BuildContext context) {
    groupMyList();

    return Scaffold(
      appBar: AppBar(title: Text(title)),
      body: ListView(
        children: [
          for (var entry in groupedLists.entries)
            SizedBox(
              width: double.infinity,
              height: 60,
              child: ListView.builder(
                itemCount: entry.value.length,
                scrollDirection: Axis.horizontal,
                itemBuilder: (context, index) {
                  return Padding(
                    padding: const EdgeInsets.all(16),
                    child: Text(entry.value[index].company),
                  );
                },
              ),
            ),
        ],
      ),
    );
  }
}