在屏幕顶部构建叠加层
Building overlay on top of screen
我有在屏幕顶部显示进度指示器的方法。
可以,但是调用 Navigator.of(context).pop();
时主屏幕黑屏了,我只想删除 CircularProgressIndicator()
,不过
myShowDialog() async{
ShowDialog(
context: context,
builder: (context) {
return const Center(
child: CircularProgressIndicator(),
);
},
);
try {
await Future.delayed(const Duration(seconds: 5));
} finally {
Navigator.of(context).pop();
}
}
我从这里调用它。
onPressed: (){
myShowDialog();
},
如何正确使用这个?
因为你用的是主界面的context
弹出。
所以尝试像下面这样移动弹出功能。
myShowDialog() async{
ShowDialog(
context: context,
builder: (context) {
Future.delayed(const Duration(seconds: 5)).then((_) {
Navigator.of(context).pop();
});
return const Center(
child: CircularProgressIndicator(),
);
},
);
}
但是,我建议创建另一个对话框小部件 class。 并在 initState
函数中调用 Future.delayed
函数。因为在builder
中调用它有一些潜在的风险。
class YourDialog extends StatefulWidget {
const YourDialog({Key? key}) : super(key: key);
@override
State<YourDialog> createState() => _YourDialogState();
}
class _YourDialogState extends State<YourDialog> {
@override
void initState() {
super.initState();
Future.delayed(const Duration(seconds: 5)).then((_) {
if (mounted) Navigator.of(context).pop();
});
}
@override
Widget build(BuildContext context) {
return Center(
child: CircularProgressIndicator(),
);
}
}
我有在屏幕顶部显示进度指示器的方法。
可以,但是调用 Navigator.of(context).pop();
时主屏幕黑屏了,我只想删除 CircularProgressIndicator()
,不过
myShowDialog() async{
ShowDialog(
context: context,
builder: (context) {
return const Center(
child: CircularProgressIndicator(),
);
},
);
try {
await Future.delayed(const Duration(seconds: 5));
} finally {
Navigator.of(context).pop();
}
}
我从这里调用它。
onPressed: (){
myShowDialog();
},
如何正确使用这个?
因为你用的是主界面的context
弹出。
所以尝试像下面这样移动弹出功能。
myShowDialog() async{
ShowDialog(
context: context,
builder: (context) {
Future.delayed(const Duration(seconds: 5)).then((_) {
Navigator.of(context).pop();
});
return const Center(
child: CircularProgressIndicator(),
);
},
);
}
但是,我建议创建另一个对话框小部件 class。 并在 initState
函数中调用 Future.delayed
函数。因为在builder
中调用它有一些潜在的风险。
class YourDialog extends StatefulWidget {
const YourDialog({Key? key}) : super(key: key);
@override
State<YourDialog> createState() => _YourDialogState();
}
class _YourDialogState extends State<YourDialog> {
@override
void initState() {
super.initState();
Future.delayed(const Duration(seconds: 5)).then((_) {
if (mounted) Navigator.of(context).pop();
});
}
@override
Widget build(BuildContext context) {
return Center(
child: CircularProgressIndicator(),
);
}
}