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;
抱歉,我是这门语言的新手
我制作了一个包含三个部分的页面
第一部分针对所有服务器,第二部分针对免费服务器,第三部分针对免费服务器
我将 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;