三元运算符未更新 Flutter 中的警报对话框 UI
Ternary operator not updating alert dialog UI in Flutter
我有一个警告对话框,其中包含相机包中的相机预览,在我拍照后,我希望警告对话框显示加载屏幕。我希望通过在对话框中使用三元运算符来完成此操作。下面是我按下按钮时调用的对话框,其中 isCalculating 是一个最初设置为 false 的布尔值,_initializeControllerFuture 初始化相机,Loading() 是加载屏幕,Stack() 有相机预览以及其他一些东西。
cameraDialog(context) async {
await showDialog(
barrierDismissible: false,
context: context,
builder: (_) => AlertDialog(
insetPadding: EdgeInsets.all(5.0),
contentPadding: EdgeInsets.all(3.0),
content: FutureBuilder<void>(
future: _initializeControllerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return isCalculating
? Loading()
: Stack(
在 cameraDialog 中,我有一个按钮可以拍照,将 bool isCalculating 设置为 true,运行一些其他代码,然后将 bool isCalculating 设置回 false。在此期间,我希望警报对话框更新其 UI 并显示 Loading() 小部件。下面是 cameraDialog 中按钮的按下事件:
onPressed: () async {
originalFile = await controller.takePicture();
setState(() {
isCalculating = true;
});
... other code is run here ...
Navigator.of(context).pop();
setState(() {
isCalculating = false;
});
},
如您所见,cameraDialog
是一个由 onPress
或 onTap
等函数触发的函数。当您调用 setState
时,它实际上调用了 Widget build(BuildContext context)
方法并重建了小部件树,但它从不处理函数的状态或函数内容的内部。所以在你使用它的地方调用 setState
是没有用的。那你能做什么?你可以创建一个 StatefullWidget
ex- MyAlertDialog
并将其显示为
onTap: ()=> showDialog(context: context, builder: (ctx) => MyAlertDialog()),
在 MyAlertDialog
中,您可以像在这里一样处理您的状态。
我有一个警告对话框,其中包含相机包中的相机预览,在我拍照后,我希望警告对话框显示加载屏幕。我希望通过在对话框中使用三元运算符来完成此操作。下面是我按下按钮时调用的对话框,其中 isCalculating 是一个最初设置为 false 的布尔值,_initializeControllerFuture 初始化相机,Loading() 是加载屏幕,Stack() 有相机预览以及其他一些东西。
cameraDialog(context) async {
await showDialog(
barrierDismissible: false,
context: context,
builder: (_) => AlertDialog(
insetPadding: EdgeInsets.all(5.0),
contentPadding: EdgeInsets.all(3.0),
content: FutureBuilder<void>(
future: _initializeControllerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return isCalculating
? Loading()
: Stack(
在 cameraDialog 中,我有一个按钮可以拍照,将 bool isCalculating 设置为 true,运行一些其他代码,然后将 bool isCalculating 设置回 false。在此期间,我希望警报对话框更新其 UI 并显示 Loading() 小部件。下面是 cameraDialog 中按钮的按下事件:
onPressed: () async {
originalFile = await controller.takePicture();
setState(() {
isCalculating = true;
});
... other code is run here ...
Navigator.of(context).pop();
setState(() {
isCalculating = false;
});
},
如您所见,cameraDialog
是一个由 onPress
或 onTap
等函数触发的函数。当您调用 setState
时,它实际上调用了 Widget build(BuildContext context)
方法并重建了小部件树,但它从不处理函数的状态或函数内容的内部。所以在你使用它的地方调用 setState
是没有用的。那你能做什么?你可以创建一个 StatefullWidget
ex- MyAlertDialog
并将其显示为
onTap: ()=> showDialog(context: context, builder: (ctx) => MyAlertDialog()),
在 MyAlertDialog
中,您可以像在这里一样处理您的状态。