[英]How to call ThemeService themeService = Provider.of(context); in the initial state of a scaffold?
[英]How to do a Flutter Test for a widget that accesses Provider.of(context)
我想知道是否有人可以帮助我,我在 flutter 项目上为我的主页编写测试时遇到了麻烦,因为它依赖于提供程序。
home_page.dart
Future<NewsModel> newsData = Provider.of<Future<NewsModel>>(context);
return FutureProvider(
create: (context) => newsData,
child: (newsData != null)
? Scaffold(
body: SmartRefresher(
controller: _refreshController,
onRefresh: _refreshNews,
onLoading: _onLoading,
child: Consumer<NewsModel>(
builder: (_, news, __) {...}
main.dart
return MultiProvider(
providers: [
FutureProvider(create: (context) => geolocatorService.getlocation()),
ProxyProvider<Position, Future<NewsModel>>(
update: (context, position, news) {
return (position != null) ? newsService.getNews() : null;
},
),
home_page_test.dart
testWidgets('Test the home screen', (WidgetTester tester) async {
HomePage homePage = new HomePage();
await tester.pumpWidget(
makeWidgetTestable(
child: homePage,
),
);
}); }
当我运行这个测试时,我收到以下错误,我真的很困惑,需要一些指导。 我对 Flutter 相当有经验,但我是为需要外部依赖项的小部件编写小部件测试的新手。 如果有人可以提供帮助,那就太好了。
错误:
The following ProviderNotFoundException was thrown building HomePage(dirty, dependencies [MediaQuery], state: _HomePageState#ce244): Error: Could not find the correct Provider<Future<NewsModel>> above this HomePage Widget
如果您使用主文件中的提供程序包装以下代码:
await tester.pumpWidget(
makeWidgetTestable(
child: homePage,
),
);
并将其变成:
testWidgets('Test the home screen', (WidgetTester tester) async {
//No longer need the following line
//HomePage homePage = new HomePage();
await tester.pumpWidget(
MultiProvider(
providers: [
FutureProvider(create: (context) => geolocatorService.getlocation()),
ProxyProvider<Position, Future<NewsModel>>(
update: (context, position, news) {
return (position != null) ? newsService.getNews() : null;
},
),
child: homePage,
),
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.