Flutter:Listview过滤器创建另一个列表

Flutter : Listview filter to create another list

抱歉,我是这门语言的新手 我制作了一个包含三个部分的页面 第一部分针对所有服务器,第二部分针对免费服务器,第三部分针对免费服务器 我将 listview.builder 与 Getx 一起使用并创建了所有服务器的列表 但我不知道如何只显示免费服务器或付费服务器 我唯一做的就是显示所有服务器 我不想为这三个部分创建三个单独的列表 我想要一个列表并根据每个部分进行查看

控制器

var servers = List.from([
    {
      'name' : 'Singapore',
      'flag' : 'assets/images/flags/singapore.png',
      'cnumber' : 7,
      'isvip' : false
    },
    {
      'name' : 'United States',
      'flag' : 'assets/images/flags/usa.png',
      'cnumber' : 3,
      'isvip' : true
    },
    {
      'name' : 'Netherlands',
      'flag' : 'assets/images/flags/netherlands.png',
      'cnumber' : 8,
      'isvip' : false
    },
    {
      'name' : 'Argentina',
      'flag' : 'assets/images/flags/argentina.png',
      'cnumber' : '2',
      'isvip' : false
    },

  ]).obs;

我使用变量(isvip)创建付费订阅图标 但我不知道如何使用它来过滤它到另一个列表

我相信您正在尝试制作两个列表,一个用于免费服务器,一个用于 non-free 服务器?如果是这样,请尝试以下操作:

首先,像这样创建一个新的 class(自定义“服务器”对象):

class Server{
  String name;
  String flag;
  int number;
  bool isVIP;

  Item({required this.name, required this.flag, required this.number, required this.isVIP});
}

接下来,将您的服务器更改为使用您的服务器项目的列表:

var servers = [
    Server(
        name: "Singapore",
        flag: "assets/images/flags/singapore.png",
        number: 7,
        isVIP: false),
    Server(
        name: "United States",
        flag: "assets/images/flags/usa.png",
        number: 3,
        isVIP: true),
  ];
// The rest of your items, and add new items by doing:
// servers.add(Item(...));

最后,您可以通过以下方式查询列表:

List<Item> vipServers = [];
setState(() {
      vipServers = (servers.where((element) => element.isVIP)).toList();
    });
// You can query the list by any of your server objects fields by changing the 
// "element.isVIP"

编辑:刚意识到我漏掉了你的部分问题。要更改列表视图,您可以执行以下操作:

设置一个新的 List<Server> currentServerList,当您需要更改正在查看的服务器时 - 例如,当用户单击“免费服务器”时,只需执行以下操作:

setState(() {currentServerList = (servers.where((element) => !element.isVIP)).toList();});

并让您的 ListView 像这样:

ListView(
          children: List.generate(currentServerList.length, (index) {
            return Text(currentServerList[index].name);
            // Whatever you wish to do inside your listview.
          }),
        ),

编辑编辑(见评论):

您可以通过以下方式创建 VIP 服务器列表:

List<Server> vipServers = [];
setState(() {
      vipServers = (servers.where((element) => element.isVIP)).toList();
    });
// You can query the list by any of your server objects fields by changing the 
// "element.isVIP"

您可以通过以下方式制作免费服务器列表:

List<Server> freeServers = [];
setState(() {
      vipServers = (servers.where((element) => !element.isVIP)).toList();
    });
// note the "!element.isVIP" meaning, where it is NOT isVIP.

您可以通过

合并这些
List<Server> allServers = vipServers + freeServers;