我有一个如下所示的小部件定义:
我还为该小部件定义了一个命名路由:
无论何时我想推送这个路由,我都会按照以下步骤进行:
import ...;
...
class TechnicalError extends StatelessWidget {
...
@override
Widget build(BuildContext context) {
TechnicalErrorPayload payload = ModalRoute.of(context).settings.arguments;
return Scaffold(
body: Column(...)
);
}
}
我还为该小部件定义了一个命名路由:
```我也为该widget定义了一个命名路由:```
import ...;
const String TECHNICAL_DIFFICULTIES = '/technical-difficulties';
class MyApp extends StatelessWidget {
MyApp() {
...
}
@override
Widget build(BuildContext context) {
return MaterialApp(
routes: <String, WidgetBuilder> {
...
TECHNICAL_DIFFICULTIES: (BuildContext context) => TechnicalError()
}
...
);
}
}
无论何时我想推送这个路由,我都会按照以下步骤进行:
var techErrPayload = TechnicalErrorPayload(...);
await Navigator.of(context).pushNamed(TECHNICAL_DIFFICULTIES, arguments: techErrPayload);
一切都按预期运行。问题出现在我想测试TechnicalError小部件时...如何将TechnicalErrorPayload传递给该小部件?它不是构造函数的一部分,而是由ModalRoute的属性获取。
这种方法行不通:
testWidgets('Me testing', (WidgetTester tester) async {
MaterialPageRoute test = MaterialPageRoute(
builder: (BuildContext context) => TechnicalError(),
settings: RouteSettings(
name: 'Blah',
arguments: TechnicalErrorPayload(friendlyErrorMessage: 'Hey Joe')
)
);
//await tester.pumpWidget(WidgetWrapper.fromRouteWithNavigatorObservers(test, [navigatorobserverMock]));
await tester.pumpWidget(
MaterialApp(
navigatorObservers: [navigatorobserverMock],
routes: {
'/': (BuildContext context) => test.builder(context)
},
)
);
await tester.pumpAndSettle();
});