android - 使用 pushNamed() 从屏幕错误中颤振返回数据
问题描述
我使用 pushNamed() 从屏幕获取返回数据,如下所示:
_pushToPage2() async {
String result = await Navigator.pushNamed(context, "/page2");
print("$tag $result");
}
但是代码有问题,这是完整的错误堆栈跟踪:
E/flutter: [ERROR:flutter/shell/common/shell.cc(181)] Dart 错误:未处理的异常:
类型“MaterialPageRoute”不是“Route”类型的子类型
0 NavigatorState._routeNamed (package:flutter/src/ widgets/navigator.dart:1408:14)
1 NavigatorState.pushNamed (package:flutter/src/widgets/navigator.dart:1454:20)
2 _MyHomePageState._pushToPage2 (file:///Users/wang/flutter_project/flutter_navigation/lib /main.dart:113:50)
3 _MyHomePageState.build。(file:///Users/wang/flutter_project/flutter_navigation/lib/main.dart:58:19)
4 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
5 _InkResponseState.build。(package:flutter/src/material/ink_well.dart:562:30)
6 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
7 TapGestureRecognizer._checkUp (package:flutter/src/gestures /tap.dart:242:9)
8 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)
9 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9 )
10 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
11 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
12 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:143:19)
13 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)
14 _WidgetsFlutterBinding&BindingBase&_package:flutterBinding. /src/gestures/binding.dart:101:7)
15 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)
16 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart :48:7)
17 _invoke1 (dart:ui/hooks.dart:153:13)
18 _dispatchPointerDataPacket (dart:ui/hooks.dart:107:5)
但以下代码工作正常:
_pushToPage2() async {
String result = await Navigator.push(
context, MaterialPageRoute(builder: (context) => Page2()));
print("$tag $result");
}
解决方案
对我来说,错误是一个不同的错误 ( type 'MaterialPageRoute<dynamic>' is not a subtype of type 'Route<String>'
),我通过将返回值声明为动态类型来解决它:
dynamic result = await Navigator.of(context).pushNamed("/page");
虽然这会失去一些类型安全性,但对我来说效果很好。
推荐阅读
- gpu - SLURM:每个节点应该有不同的 gres.conf 吗?
- clickhouse - 在时间窗口之外立即获取行的有效方法
- reactjs - 如何在微前端场景中共享状态?
- firebase - 如何从 Vue js 管理 Firebase Auth 用户?
- excel - Excel 中的 Y 轴断裂(注意:枢轴(!)图)
- microsoft-graph-api - 让 group.selected 在图形 API 中工作我做错了什么?
- excel - 在 Chrome 浏览器中打开多个 URL
- angular - Ag-Grid 显示我没有的第三列
- c# - 在 C# 中操作动态创建的 JSON 字符串
- r - 逐步了解 R Flexdashboard 和 Google Analytics