gpt4 book ai didi

unit-testing - 在 Flutter 中使用参数模拟路由 - Dart

转载 作者:行者123 更新时间:2023-12-04 17:37:12 28 4
gpt4 key购买 nike

我有一个小部件定义如下:

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 包裹在 a
Material 页面路由。然后在路由设置中,我能够传递路由所需的任何参数。

await tester.pumpWidget(
MaterialApp(
onGenerateRoute: (settings) {
return MaterialPageRoute(
settings: RouteSettings(arguments: // Your Argument here),
builder: (context) {
return TheScreen();
},
);
},
)
);

关于unit-testing - 在 Flutter 中使用参数模拟路由 - Dart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56190034/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com