我有一个应用程序,当用户单击FAB时会添加一个Card
小部件。有Card
类型的列表,显示在SliverGrid
中,该列表存储用户添加的Card
。我想实现一个删除功能,但是当我尝试执行该操作时,出现错误“在声明它之前不能使用局部变量”。使用以下代码将Card
添加到列表中:
int _count = 0;
cardList = List.generate(_count, (int i) =>
new Card(
child: ListTile(
title: Text("project 1"),
trailing: new Listener(
key: new Key(UniqueKey().toString()),
child: new Icon(Icons.remove_circle,
color: Colors.redAccent,),
onPointerDown: (pointerEvent) {}
// deleteNoDo(), //this is the delete function
),
),
)
);
Card
是使用以下代码生成的(此按钮在Scaffold
下定义):
floatingActionButton: FloatingActionButton(
onPressed: () async {
setState(() {
_count += 1;
});
},
heroTag: "btn2",
child: Icon(Icons.add, color: Color(whitecolor),), // this is just a custom color
backgroundColor: Color(redcolor),), // this is just a custom color
这是删除功能:
deleteNoDo(int index) {
debugPrint("Deleted Item!");
setState(() {
cardList.removeAt(index);
});
}
这是显示SliverGrid
的{{1}}:
cardList
问题:由于数据库(CRUD)函数处于异步状态,如果我使用数据库,是否可以解决错误“在声明之前不能使用局部变量”?
答案 0 :(得分:0)
问题是您的cardList
变量是本地变量,并且您试图在没有范围访问它的异步回调中访问它。在cardList
内声明initState
并将其初始化为一个空的List,并在内部版本中或您要分配该变量实际值的任何位置,然后在执行删除按钮操作后就可以对其进行访问。