flutter Force listview builder 根据条件只显示 1 个项目
flutter Force listview builder to show only 1 item based on condition
我正在使用 hive 制作一个待办事项项目,我想在不同的行中显示标记为已完成和未完成的待办事项。现在,当标记为已完成的行为空时,我想显示一条消息,例如“您可以在完成待办事项后将待办事项标记为已完成”。我已经实现了这些功能,但问题是消息“您可以在完成待办事项后将待办事项标记为已完成”随着待办事项中的项目数量重复出现。例如,如果待办事项包含 2 个待办事项并且都未完成,那么我会收到消息:
“您可以在完成待办事项后将其标记为已完成”
"您可以在完成待办事项后将其标记为已完成"
我正在使用的代码:
ListView.builder(
primary: false,
itemCount: Hive.box___.length,
itemBuilder: (context, index) {
Todo? data = Hive.box____.getAt(index);
return data!.isCompleted
? _______ //show the todos that are completed
: const Center(
child: Text(
"You can mark todos as completed after completing the todo"
),
);
},
您还必须对 itemCount 设置条件。
所以你有 2 个列表视图。一个用于未完成的项目,一个用于完成的项目。
在每个 ListView
中,您必须过滤您的列表,以便将过滤后的项目传递到每个列表。在你写的完整列表视图中
itemCount: completedItems.lenth == 0 ? 1 : completedItems.lenth
并且在生成器中,您必须检查 completedItems.lenth
是否为零然后 return Text
否则 return 相应的卡片。
在构建器外部实现数据
List<Todo>? data = Hive.box____.get('name')
int count = Hive.box___.length;
ListView.builder(
primary: false,
itemCount:count,
itemBuilder: (context, index) {
);
if(data![index].isCompleted){
return _______ //show the todos that are completed
}
else {return const Center(
child: Text(
"You can mark todos as completed after completing the todo"
),
);
count = 0;
}
},
我已经解决了这个问题,首先我过滤并检查是否没有完成的项目,如果是,我将项目计数显示为 1 否则它将是待办事项列表的长度。
这是我的代码
ListView.builder(
primary: false,
itemCount: Hive.box___.length,
itemBuilder: (context, index) {
Todo? data = Hive.box__.values
.where((element) => element.iscompleted == true)
.isEmpty
? 1
: Hive.box____.length,;
return data!.isCompleted
? _______ //show the todos that are completed
: const Center(
child: Text(
"You can mark todos as completed after completing the todo"
),
);
},
此外,我的代码受到@Riza 分享的代码的启发,感谢您让我知道 Hive.box____.get('name')
@Giorgi
我正在使用 hive 制作一个待办事项项目,我想在不同的行中显示标记为已完成和未完成的待办事项。现在,当标记为已完成的行为空时,我想显示一条消息,例如“您可以在完成待办事项后将待办事项标记为已完成”。我已经实现了这些功能,但问题是消息“您可以在完成待办事项后将待办事项标记为已完成”随着待办事项中的项目数量重复出现。例如,如果待办事项包含 2 个待办事项并且都未完成,那么我会收到消息:
“您可以在完成待办事项后将其标记为已完成” "您可以在完成待办事项后将其标记为已完成"
我正在使用的代码:
ListView.builder(
primary: false,
itemCount: Hive.box___.length,
itemBuilder: (context, index) {
Todo? data = Hive.box____.getAt(index);
return data!.isCompleted
? _______ //show the todos that are completed
: const Center(
child: Text(
"You can mark todos as completed after completing the todo"
),
);
},
您还必须对 itemCount 设置条件。
所以你有 2 个列表视图。一个用于未完成的项目,一个用于完成的项目。
在每个 ListView
中,您必须过滤您的列表,以便将过滤后的项目传递到每个列表。在你写的完整列表视图中
itemCount: completedItems.lenth == 0 ? 1 : completedItems.lenth
并且在生成器中,您必须检查 completedItems.lenth
是否为零然后 return Text
否则 return 相应的卡片。
在构建器外部实现数据
List<Todo>? data = Hive.box____.get('name')
int count = Hive.box___.length;
ListView.builder(
primary: false,
itemCount:count,
itemBuilder: (context, index) {
);
if(data![index].isCompleted){
return _______ //show the todos that are completed
}
else {return const Center(
child: Text(
"You can mark todos as completed after completing the todo"
),
);
count = 0;
}
},
我已经解决了这个问题,首先我过滤并检查是否没有完成的项目,如果是,我将项目计数显示为 1 否则它将是待办事项列表的长度。
这是我的代码
ListView.builder(
primary: false,
itemCount: Hive.box___.length,
itemBuilder: (context, index) {
Todo? data = Hive.box__.values
.where((element) => element.iscompleted == true)
.isEmpty
? 1
: Hive.box____.length,;
return data!.isCompleted
? _______ //show the todos that are completed
: const Center(
child: Text(
"You can mark todos as completed after completing the todo"
),
);
},
此外,我的代码受到@Riza 分享的代码的启发,感谢您让我知道 Hive.box____.get('name')
@Giorgi