簡體   English   中英

在 Flutter 中使用參數模擬路由 - Dart

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM