我正在嘗試使用 MVC 模式顯示一個對話框。
我希望對話框是一個小部件。像這樣:
AlertDialog gameDecisionDialog({
required VoidCallback onClick,
required String strDecision,
required Color decisionColor,
required BuildContext context,
}) {
return AlertDialog(
titleTextStyle: const TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 20,
),
actionsOverflowButtonSpacing: 20,
actions: [
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
return onClick();
},
child: const Icon(Icons.next_plan_outlined),
),
],
content: Text(strDecision),
);
}
此對話框將在模型層中呼叫。根據應用程式期間發生的情況,將出現一個對話框。問題是背景關系部分。
將背景關系從視圖層向下傳遞到控制器層,然后再傳遞到模型層是否有意義?似乎效率低下。
關于如何做到這一點的任何想法?我試圖避免在視圖層中有對話框,它會變得太亂。
- - - - - - - - 更新
將我的代碼修改為以下建議,但現在我的警報對話框沒有出現。
請參閱以下代碼(單擊按鈕時執行一些操作然后顯示對話框):
elevatedRectButton(
onClick: () {
setState(() {
MyController.stop();
gameDecisionDialog(
onClick: () {
MyController.start();
},
gameDecision: MyController.getGameDecision,
decisionColor: Colors.amber,
context: context,
);
});
},
mIcon: const Icon(Icons.do_not_touch),
subText: 'STOP',
minWidth: 20,
height: 20,
bgColor: Colors.red,
),
我擔心在小部件中呼叫小部件可能會導致此問題?
uj5u.com熱心網友回復:
不建議將 BuildContext 傳遞到模型/控制器中。在模型中的作業完成后或拋出錯誤時,嘗試從小部件呼叫警報。
Example:
onPress: () async {
//Some trigger callback
startLoading();
await controller.doWork().catchError((e) {
stopLoading();
showAlert(context, 'Some Message etc');
});
stopLoading();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/359627.html
