可以使用异步函数解决错误“在声明之前不能使用局部变量”吗?

时间:2019-09-16 05:39:47

标签: flutter sqflite

我有一个应用程序,当用户单击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)函数处于异步状态,如果我使用数据库,是否可以解决错误“在声明之前不能使用局部变量”?

1 个答案:

答案 0 :(得分:0)

问题是您的cardList变量是本地变量,并且您试图在没有范围访问它的异步回调中访问它。在cardList内声明initState并将其初始化为一个空的List,并在内部版本中或您要分配该变量实际值的任何位置,然后在执行删除按钮操作后就可以对其进行访问。