【发布时间】:2021-05-22 16:05:22
【问题描述】:
我有一个 MaterialButton 和以下 onPressed 字段:
onPressed: () async {
final int intResult = await showMyDialog(context, provider.myArg) ?? 0;
//...
}
这是showMyDialog函数:
Future<int?> showMyDialog(BuildContext context, Object someArg) async {
return showDialog<int>(
context: context,
builder: (BuildContext context) {
return ChangeNotifierProvider<MyProvider>(
create: (_) => MyProvider(someArg),
child: MyDialog(),
);
},
);
}
现在我看到的问题是,在MyDialog(StatelessWidget)中,我需要使用Navigator.pop(...) 来为等待的intResult 返回一个值。但是,我似乎无法找到对这些调用进行强类型化的方法,因此很难确定不会发生运行时类型错误。
我现在最好的方法是继承 StatelessWidget 并将 Navigator 函数包装在其中:
abstract class TypedStatelessWidget<T extends Object> extends StatelessWidget {
void pop(BuildContext context, [T? result]) {
Navigator.pop(context, result);
}
}
那么在TypedStatelessWidget<int>中我们可以正常使用pop(context, 0),而pop(context, 'hi')会被编辑器标记为类型错误。这仍然没有链接对话框返回类型和导航器,但至少它避免了手动键入每个导航器调用。
有没有更好的方法来进行强类型化?
【问题讨论】:
标签: flutter dart strong-typing flutter-navigation