带有自定义对象的 Flutter ReorderableListView
Flutter ReorderableListView with custom object
我目前在使用 ReorderableListView 时遇到一些困难。
我有一个 ToDoPrefabs 列表,我想输出它,因为我的列表不包含字符串而是其他东西,我在索引、键和文本中遇到错误。
这是错误:
“类型 'To Prefab' 不是类型 'int'”的子类型“=30=]
我怀疑这是关键。这也是合乎逻辑的,因为 todoprefab 不是 int。有谁知道如何在我的 ReorderableListView
中获取另一个 int 类型的索引
这是我的 ReorderableListView
return ReorderableListView(
onReorder: _onReorder,
scrollDirection: Axis.vertical,
padding: const EdgeInsets.symmetric(vertical: 8.0),
children: [
for(final item in toDoManagerClass.todoBank)
todocardprefab(item)
]
);
todocardprefab(不是列表)
todocardprefab(var key){
return Dismissible(
key: ValueKey(key),
background: Container(color: Colors.red, alignment: Alignment.centerLeft, child: Icon(Icons.delete),),
secondaryBackground: Container(color: Colors.green, alignment: Alignment.centerRight, child: Icon(Icons.archive),),
child: Card(
child: ListTile(
//leading: Icon(Icons.check_box_outline_blank),
title: Text(toDoManagerClass.todoBank[key].toDoText),
onTap: (){},
),
),
);
}
这是简单列表。
class ToDoManagerClass{
List<ToDoPrefab> todoBank = [
ToDoPrefab(text: 'Homework', f: false),
ToDoPrefab(text: 'Homework1', f: false),
ToDoPrefab(text: 'Homework12', f: false),
ToDoPrefab(text: 'Homework123', f: false),
ToDoPrefab(text: 'Homework1234', f: false),
ToDoPrefab(text: 'Homework12345', f: false),
];
}
这个方法应该有效:
您的可重新记录列表视图
return ReorderableListView(
onReorder: _onReorder,
scrollDirection: Axis.vertical,
padding: const EdgeInsets.symmetric(vertical: 8.0),
children: [
for(final item in toDoManagerClass.todoBank)
todocardprefab(item, index())
]
);
这里是函数。它 returns 每次调用都会增加一个数字。
int index(){
if(i < toDoManagerClass.todoBank.length){
print(i);
i++;
}
return i-1;
}
现在您只需使用索引而不是您的 todocard 中的项目
我目前在使用 ReorderableListView 时遇到一些困难。
我有一个 ToDoPrefabs 列表,我想输出它,因为我的列表不包含字符串而是其他东西,我在索引、键和文本中遇到错误。
这是错误:
“类型 'To Prefab' 不是类型 'int'”的子类型“=30=]
我怀疑这是关键。这也是合乎逻辑的,因为 todoprefab 不是 int。有谁知道如何在我的 ReorderableListView
中获取另一个 int 类型的索引这是我的 ReorderableListView
return ReorderableListView(
onReorder: _onReorder,
scrollDirection: Axis.vertical,
padding: const EdgeInsets.symmetric(vertical: 8.0),
children: [
for(final item in toDoManagerClass.todoBank)
todocardprefab(item)
]
);
todocardprefab(不是列表)
todocardprefab(var key){
return Dismissible(
key: ValueKey(key),
background: Container(color: Colors.red, alignment: Alignment.centerLeft, child: Icon(Icons.delete),),
secondaryBackground: Container(color: Colors.green, alignment: Alignment.centerRight, child: Icon(Icons.archive),),
child: Card(
child: ListTile(
//leading: Icon(Icons.check_box_outline_blank),
title: Text(toDoManagerClass.todoBank[key].toDoText),
onTap: (){},
),
),
);
}
这是简单列表。
class ToDoManagerClass{
List<ToDoPrefab> todoBank = [
ToDoPrefab(text: 'Homework', f: false),
ToDoPrefab(text: 'Homework1', f: false),
ToDoPrefab(text: 'Homework12', f: false),
ToDoPrefab(text: 'Homework123', f: false),
ToDoPrefab(text: 'Homework1234', f: false),
ToDoPrefab(text: 'Homework12345', f: false),
];
}
这个方法应该有效:
您的可重新记录列表视图
return ReorderableListView(
onReorder: _onReorder,
scrollDirection: Axis.vertical,
padding: const EdgeInsets.symmetric(vertical: 8.0),
children: [
for(final item in toDoManagerClass.todoBank)
todocardprefab(item, index())
]
);
这里是函数。它 returns 每次调用都会增加一个数字。
int index(){
if(i < toDoManagerClass.todoBank.length){
print(i);
i++;
}
return i-1;
}
现在您只需使用索引而不是您的 todocard 中的项目