Flutter 当数据库获得新数据时,如何更新FutureBuilder?

Flutter 当数据库获得新数据时,如何更新FutureBuilder?,flutter,dart,sqflite,Flutter,Dart,Sqflite,我正在创建一个待办事项列表应用程序。我有一个FutureBuilder小部件,可以处理任务的所有内容。然后我有另一个小部件,其中有两个浮动操作按钮,其中一个从sql中删除表,另一个打开另一个小部件向数据库添加任务。他们两个都工作。但我必须重新加载应用程序才能看到更改。我看到有两个像这样的问题,但没有明确的答案,我花了大约一个小时寻找答案,但我什么也找不到 这是我有两个操作按钮的小部件 class FloatingActionButtons extends StatelessWidget {

我正在创建一个待办事项列表应用程序。我有一个FutureBuilder小部件,可以处理任务的所有内容。然后我有另一个小部件,其中有两个浮动操作按钮,其中一个从sql中删除表,另一个打开另一个小部件向数据库添加任务。他们两个都工作。但我必须重新加载应用程序才能看到更改。我看到有两个像这样的问题,但没有明确的答案,我花了大约一个小时寻找答案,但我什么也找不到

这是我有两个操作按钮的小部件

class FloatingActionButtons extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Consumer<DataProvider>(
      builder: (context, data, child) {
        return Padding(
          padding: const EdgeInsets.all(10.0),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              FloatingActionButton(
                backgroundColor: Color(0xFF25202B),
                onPressed: () {
                  data.deleteAll();
                },
                child: Icon(Icons.clear, size: 30.0, color: Colors.white),
              ),
              FloatingActionButton(
                backgroundColor: Color(0xFF25202B),
                onPressed: () {
                  showModalBottomSheet(
                      context: context,
                      isScrollControlled: true,
                      builder: (context) => AddTaskScreen());
                },
                child: Icon(Icons.add, size: 30.0, color: Colors.white),
              ),
            ],
          ),
        );
      },
    );
  }
}
class FloatingActionButtons扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
退货消费者(
生成器:(上下文、数据、子对象){
返回填充(
填充:常数边集全部(10.0),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
浮动操作按钮(
背景颜色:颜色(0xFF25202B),
已按下:(){
data.deleteAll();
},
子项:图标(图标。清晰,大小:30.0,颜色:彩色。白色),
),
浮动操作按钮(
背景颜色:颜色(0xFF25202B),
已按下:(){
showModalBottomSheet(
上下文:上下文,
是的,
生成器:(上下文)=>AddTaskScreen());
},
子项:图标(Icons.add,大小:30.0,颜色:Colors.white),
),
],
),
);
},
);
}
}
这是我有FutureBuilder的小部件

class DisplayTasks extends StatefulWidget {
  @override
  _DisplayTasksState createState() => _DisplayTasksState();
}

class _DisplayTasksState extends State<DisplayTasks> {
  final db = DBHelper.instance;
  Future<List<Task>> tasks;

  void updateTasksList() {
    setState(() {
      tasks = db.getTaskList();
    });
  }

  void toggleDone(Task task) {
    setState(() {
      if (task.isDone == 0) {
        task.isDone = 1;
      } else {
        task.isDone = 0;
      }
      db.update(task);
    });
  }

  void deleteTask(String taskName) {
    setState(() {
      db.deleteTask(taskName);
    });
  }

  void insert(taskName, isDone) {
    setState(() {
      db.insertTask(Task(
        taskName: taskName,
        isDone: isDone,
      ));
    });
  }

  @override
  void initState() {
    super.initState();
    updateTasksList();
  }

  @override
  Widget build(BuildContext context) {
    updateTasksList();
    return Expanded(
      child: FutureBuilder(
          future: tasks,
          builder: (context, snapshot) {
            if (!snapshot.hasData) {
              return Center(
                child: Text(
                  'No tasks added yet.',
                  style: TextStyle(
                    fontSize: 30.0,
                    fontWeight: FontWeight.bold,
                  ),
                ),
              );
            }

            if (snapshot.hasError) {
              return Center(
                child: Text('Future Error'),
              );
            }

            return ListView.builder(
              itemCount: snapshot.data.length,
              shrinkWrap: true,
              itemBuilder: (context, index) {
                return GestureDetector(
                  onLongPress: () {
                    deleteTask(snapshot.data[index].taskName);
                  },
                  onTap: () {
                    toggleDone(snapshot.data[index]);
                  },
                  child: Container(
                    padding:
                        EdgeInsets.symmetric(vertical: 20.0, horizontal: 10.0),
                    margin:
                        EdgeInsets.symmetric(horizontal: 30.0, vertical: 10.0),
                    decoration: BoxDecoration(
                        color: Color(0xFF252030),
                        borderRadius: BorderRadius.circular(15.0)),
                    child: Center(
                      child: Text(
                        '${snapshot.data[index].taskName}',
                        style: TextStyle(
                            decoration: snapshot.data[index].isDone == 0
                                ? TextDecoration.none
                                : TextDecoration.lineThrough,
                            fontSize: 18.0,
                            fontWeight: FontWeight.bold,
                            textBaseline: TextBaseline.ideographic),
                      ),
                    ),
                  ),
                );
              },
            );
          }),
    );
  }
}
类DisplayTasks扩展StatefulWidget{
@凌驾
_DisplayTasksState createState()=>\u DisplayTasksState();
}
类_DisplayTasksState扩展状态{
final db=DBHelper.instance;
今后的任务;
void updateTaskList(){
设置状态(){
tasks=db.getTaskList();
});
}
void toggleDone(任务){
设置状态(){
如果(task.isDone==0){
task.isDone=1;
}否则{
task.isDone=0;
}
数据库更新(任务);
});
}
void deleteTask(字符串taskName){
设置状态(){
db.deleteTask(任务名称);
});
}
无效插入(任务名,isDone){
设置状态(){
db.insertTask(任务(
taskName:taskName,
isDone:isDone,
));
});
}
@凌驾
void initState(){
super.initState();
updateTaskList();
}
@凌驾
小部件构建(构建上下文){
updateTaskList();
扩大回报(
孩子:未来建设者(
未来:任务,
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回中心(
子:文本(
“尚未添加任何任务。”,
样式:TextStyle(
字体大小:30.0,
fontWeight:fontWeight.bold,
),
),
);
}
if(snapshot.hasError){
返回中心(
子项:文本(“未来错误”),
);
}
返回ListView.builder(
itemCount:snapshot.data.length,
收缩膜:对,
itemBuilder:(上下文,索引){
返回手势检测器(
onLongPress:(){
deleteTask(snapshot.data[index].taskName);
},
onTap:(){
切换完成(snapshot.data[index]);
},
子:容器(
衬垫:
边缘组。对称(垂直:20.0,水平:10.0),
保证金:
边缘组。对称(水平:30.0,垂直:10.0),
装饰:盒子装饰(
颜色:颜色(0xFF252030),
边界半径:边界半径。圆形(15.0)),
儿童:中心(
子:文本(
“${snapshot.data[index].taskName}”,
样式:TextStyle(
装饰:snapshot.data[index].isDone==0
?无
:textEdition.lineThrough,
字体大小:18.0,
fontWeight:fontWeight.bold,
textBaseline:textBaseline.ideographic),
),
),
),
);
},
);
}),
);
}
}
非常感谢所有能够提供帮助的人