У меня была точно такая же проблема при тестировании виджета, и я смог ее решить.Вот «До кода», который не работал, и «После кода», который сделал трюк ...
ПЕРЕД КОДОМ
Обратите внимание, что при накачке виджета MaterialApp устанавливается как самый верхнийвиджет.
Future<Null> _buildRideCard(WidgetTester tester) async {
await tester.pumpWidget(MaterialApp( // top most widget
localizationsDelegates: [
AppLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
],
//some other stuff, irrelevant for this example
));
}
ПОСЛЕ КОДА
Обратите внимание, что виджет MaterialApp теперь обернут BlocProvider, а его свойству blocProviders предоставлен список блоков, необходимых тесту виджета.Это решило мою проблему, и теперь у меня нет проблем с контекстом в блоке в моем тесте виджетов.Надеюсь, это поможет;)
Future<Null> _buildRideCard(WidgetTester tester) async {
await tester.pumpWidget(BlocProviderTree( // <- magic #1
blocProviders: [ <- magic #2
BlocProvider<RideDetailsBloc>(
bloc: RideDetailsBloc(_setupRidesRepo()))
],
child: MaterialApp(
localizationsDelegates: [
AppLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
],
//some other stuff, irrelevant for this example
),
));
}