Flutter: Mapbox onMapCreated не вызывается в тесте виджетов
Я использую карту Mapbox, и когда я запускаю приложение в эмуляторе, оно работает нормально. Однако в моем тесте виджетов
onMapCreated
метод никогда не вызывается, что делает невозможным тестирование поведения приложения.
My MapWidget (сокращенный):
class MapWidget extends StatefulWidget {
final LatLng initialCameraPositionCoordinates;
final double initialZoomLevel;
const MapWidget({
Key key,
@required this.initialCameraPositionCoordinates,
@required this.initialZoomLevel,
}) : super(key: key);
@override
State createState() => MapWidgetState();
}
class MapWidgetState extends State<MapWidget> {
@override
Widget build(BuildContext context) {
return BlocConsumer<Cubit, State>(
builder: (context, state) {
return MouseRegion(
cursor: MouseCursor.defer,
child: MapboxMap(
onMapCreated: _onMapCreated,
),
);
},
);
}
void _onMapCreated(MapboxMapController controller) async {
print("This is never called in the test");
}
И соответствующий тест виджета выглядит так:
void main() {
testWidgets("Mapbox", (WidgetTester tester) async {
await tester.pumpWidget(
BlocProvider(
create: (_) => _cubit,
child: MaterialApp(
home: MapWidget(
initialCameraPositionCoordinates:
_initialCameraPositionCorrdinates,
initialZoomLevel: _initialZoomLevel,
),
),
),
);
await tester.pump(Duration(seconds: 10));
});
}
Исключения не возникает, что означает, что все работает нормально. Однако оператор печати в
onMapCreated
никогда не печатается.
При запуске приложения в эмуляторе вызывается оператор печати.
Кто-нибудь знает, что здесь происходит?
1 ответ
Я столкнулся с той же проблемой и решил ее обойти, вызвав обратные вызовы вручную. Примерно так в вашем тесте виджетов:
var mapboxMap = tester.firstWidget(find.byType(MapboxMap)) as MapboxMap;
mapboxMap.onMapCreated!(<mocked controller>);
mapboxMap.onStyleLoadedCallback!();
Где "<mocked controller" - это экземпляр вашего
MapboxMapController
насмехаться.
Я предполагаю, что основная проблема связана с тем, что собственное представление карты на самом деле не загружается во время тестов виджетов, и поэтому обратные вызовы не вызываются.