Flutter无需点击FloatingActionButton触发onPressed打开showModalBottomSheet方法
解决方案
你只需要把打开底部弹窗的逻辑抽成公共方法,分别在新增待办和编辑待办的逻辑中调用即可,不需要额外开发新的弹窗组件,完全复用现有逻辑:
- 首先在
_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); }); }); }
- 修改FloatingActionButton的点击逻辑,调用上面的公共方法,注意新增前先清空之前的编辑状态:
floatingActionButton: FloatingActionButton( onPressed: () { _clear(); _openToDoBottomSheet(); }, child: const Icon(Icons.add), backgroundColor: Colors.deepPurple, ),
- 修改
_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
相关产品推荐
相关产品推荐

