Kyl*_*nch 0 dart flutter flutter-layout
我正在尝试在处理信用卡时创建一个加载对话框。我遇到的问题是我希望能够在我的未来完成时更新对话框状态。
更新对话框状态的唯一方法似乎是使用 StatefulBuilder 小部件。我发现这一点是因为我尝试在 processPayment 方法中更改 cartLoading 但没有任何反应。
我希望它在创建对话框时自动调用 processPayment(),而不是我必须点击按钮。这可能吗?
class CartModel extends ChangeNotifier {
bool _cartLoading = false;
bool get cartLoading => _cartLoading;
set setLoading(bool value) {
_cartLoading = value;
notifyListeners();
}
Future<bool?> openLoadingDialog(BuildContext context) async {
setLoading = true;
return showDialog<bool?>(
context: context,
builder: (context) => StatefulBuilder(
builder: (context, setState) {
return Dialog(
child: Container(
child: Column(
children: [
CustomButton(
name: "Process payment",
onPressed: () {
setState(() => setLoading = true);
processPayment()
.then((value) => setState(() => setLoading = false));
},
primaryColor: Colors.black,
onPrimaryColor: Colors.white),
Center(
child: SizedBox(
width: 150,
height: 150,
child: cartLoading
? const CircularProgressIndicator()
: const Text("Thank you for your order"),
),
)
],
),
),
);
},
),
barrierDismissible: false,
);
}
}
Run Code Online (Sandbox Code Playgroud)
更新对话框状态的唯一方法似乎是使用 StatefulBuilder 小部件。
不必要。您可以创建一个普通的小部件:
class MyDialog extends StatefulWidget { ... }
class _MyDialogState extends State<MyDialog> {
@override
void initState() {
super.initState();
// Put your initialization logic here
}
@override
Widget build(BuildContext context) {
// Put your setState logic here
return Dialog(
child: Container(...),
);
}
}
Run Code Online (Sandbox Code Playgroud)
现在将其传递给showDialog:
showDialog<bool?>(
context: context,
builder: (context) => MyDialog(),
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |