gpt4 book ai didi

flutter - 在Flutter上的时间之前关闭模态底部表会导致黑屏

转载 作者:行者123 更新时间:2023-12-03 04:33:05 24 4
gpt4 key购买 nike

我正在尝试使用showModalBottomSheet创建模态底部工作表,该工作表将显示用于注册待办事项的表单。这个想法是,一旦待办事项被注册,我想在几秒钟后显示一个复选图标,然后自动关闭工作表。
这是代码段:

FloatingActionButton _floatingActionButton(BuildContext context) {
return FloatingActionButton(
child: Icon(Icons.add),
onPressed: () async {
await _showBottomSheet(
context: context,
content: CreateTodoForm(
onClose: () {
...
Navigator.pop(context);
},
),
);
},
);
}
在CreateTodoForm小部件内:
class _CreateTodoFormState extends State<CreateTodoForm> {
TextEditingController titleController = TextEditingController();
bool completed = false;
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (_) => getIt<TodoFormBloc>(),
child: BlocBuilder<TodoFormBloc, ITodoFormState>(
builder: (context, state) {
...

if (state is SubmittedTodo) {

Future.delayed(Duration(seconds: 2), widget.onClose);

return Container(
height: 127,
child: Icon(Icons.check, size: 50, color: Colors.white),
);
}

...
},
),
);
}
可以看到,状态为SubmittedTodo(todo已成功提交)时,我返回了带有选中图标的容器,并在2秒钟后调用了onClose函数,该函数是对Navigator.pop(context)的调用以关闭工作表。
这很好用,但是有一个问题...如果用户在2秒钟完成之前点击设备上的<按钮,或向下滑动工作表以将其关闭,则工作表会由于用户操作而关闭,然后将来会完成,并且基本上会关闭该应用程序(该应用程序会显示全黑屏幕)。
因此,我的问题是,如何在一段时间后安全地自动关闭工作表,而不必担心用户的操作。
enter image description here

最佳答案

这可能是由于单击后退按钮后调用Navigator.pop(context);导致两次弹出而发生的。并且显示黑屏,因为没有其他屏幕可以导航回去。

作为一种解决方案,我建议使用WillPopScope包装表单小部件,然后您将收到用户单击后退按钮的通知。在这里您可以通过调用onClose关闭表单

关于flutter - 在Flutter上的时间之前关闭模态底部表会导致黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64599337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com