You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter无需点击FloatingActionButton触发onPressed打开showModalBottomSheet方法

解决方案

你只需要把打开底部弹窗的逻辑抽成公共方法,分别在新增待办和编辑待办的逻辑中调用即可,不需要额外开发新的弹窗组件,完全复用现有逻辑:

  1. 首先在_MyHomePageState中新增公共弹窗调用方法:
void _openToDoBottomSheet() {
  showModalBottomSheet<void>(
    context: context,
    builder: (BuildContext context) {
      return ValueListenableBuilder(
        valueListenable: titleController,
        builder: (context, _content, child) {
          return NewToDo(titleController, contentController, _addTodo, _clear, _todo);
        });
    });
}
  1. 修改FloatingActionButton的点击逻辑,调用上面的公共方法,注意新增前先清空之前的编辑状态:
floatingActionButton: FloatingActionButton(
  onPressed: () {
    _clear();
    _openToDoBottomSheet();
  },
  child: const Icon(Icons.add),
  backgroundColor: Colors.deepPurple,
),
  1. 修改_editTodo方法,填充完待办编辑数据后直接触发弹窗打开:
void _editTodo(ToDo todoitem){
  setState(() {
    _todo = todoitem;
    content = todoitem.content;
    title = todoitem.title;
  });
  contentController.text = todoitem.content;
  titleController.text = todoitem.title;
  // 新增该行触发弹窗
  _openToDoBottomSheet();
}

额外小优化:你现有代码中_addTodo方法里的maxId = maxId++写法有误,会导致maxId不会自增,所有新待办的id都是0,直接改为maxId++即可。

内容的提问来源于stack exchange,提问作者Matt Croak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:18:02