У меня есть виджет, определенный следующим образом:
import ...;
...
class TechnicalError extends StatelessWidget {
...
@override
Widget build(BuildContext context) {
TechnicalErrorPayload payload = ModalRoute.of(context).settings.arguments;
return Scaffold(
body: Column(...)
);
}
}
Я также определил именованный маршрут для этого виджета:
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();
});