[英]Mocking a route with arguments in Flutter - Dart
我有一個小部件定義如下:
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();
});
為了測試使用路由參數的路由,我將屏幕小部件 a 包裝在 MaterialPageRoute 中。 然后在路由設置中,我能夠傳遞路由所需的任何參數。
await tester.pumpWidget(
MaterialApp(
onGenerateRoute: (settings) {
return MaterialPageRoute(
settings: RouteSettings(arguments: // Your Argument here),
builder: (context) {
return TheScreen();
},
);
},
)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.