使用 MVC 的 Flutter 对话框
Flutter dialog with MVC
我正在尝试显示一个带有 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),
);
}
该对话框将在模型层调用。根据应用程序期间发生的情况,将出现一个对话框。问题是 context 部分。
将上下文从视图层向下传递到控制器层,然后再传递到模型层是否有意义?似乎效率低下。
关于如何做到这一点有什么想法吗?我试图避免在视图层中出现对话框,它会变得太乱。
----------------更新
将我的代码修改为以下建议,但现在我的警告对话框没有显示。
看下面的代码(当点击按钮时做一些事情然后显示对话框):
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,
),
我担心在小部件内调用小部件可能会导致此问题?
不建议将 BuildContext 传递到 model/controller。尝试在模型中的工作完成后或抛出错误时从小部件调用警报。
Example:
onPress: () async {
//Some trigger callback
startLoading();
await controller.doWork().catchError((e) {
stopLoading();
showAlert(context, 'Some Message etc');
});
stopLoading();
}
我正在尝试显示一个带有 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),
);
}
该对话框将在模型层调用。根据应用程序期间发生的情况,将出现一个对话框。问题是 context 部分。
将上下文从视图层向下传递到控制器层,然后再传递到模型层是否有意义?似乎效率低下。
关于如何做到这一点有什么想法吗?我试图避免在视图层中出现对话框,它会变得太乱。
----------------更新
将我的代码修改为以下建议,但现在我的警告对话框没有显示。
看下面的代码(当点击按钮时做一些事情然后显示对话框):
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,
),
我担心在小部件内调用小部件可能会导致此问题?
不建议将 BuildContext 传递到 model/controller。尝试在模型中的工作完成后或抛出错误时从小部件调用警报。
Example:
onPress: () async {
//Some trigger callback
startLoading();
await controller.doWork().catchError((e) {
stopLoading();
showAlert(context, 'Some Message etc');
});
stopLoading();
}