#flutter
#flutter
Вопрос:
У меня есть googlemap, расположенная в контейнерах в pageview… Когда вы проводите пальцем между страницами, содержащими эти виджеты googlemap, копирование страниц прерывается… итак, внутри моего кода, когда я делаю
class Homepage extends StatelessWidget {
@override build(BuildContext context){
return PageView(
children: <Widget>[
Container(color:Colors.red),
Container(color:Colors.green),
Container(color:Colors.blue),
Container(color:Colors.yellow),
Container(color:Colors.pink),
// Container(child:GoogleMap(initialCameraPosition: CameraPosition(target:LatLng(0, 0)),)),
// Container(child:GoogleMap(initialCameraPosition: CameraPosition(target:LatLng(0, 0)),)),
// Container(child:GoogleMap(initialCameraPosition: CameraPosition(target:LatLng(0, 0)),)),
// Container(child:GoogleMap(initialCameraPosition: CameraPosition(target:LatLng(0, 0)),))
],
);
}
Это работает нормально, и все страницы отлично привязываются.. Однако, когда я раскомментирую виджеты GoogleMap следующим образом:
class Homepage extends StatelessWidget {
@override build(BuildContext context){
return PageView(
children: <Widget>[
// Container(color:Colors.red),
// Container(color:Colors.green),
// Container(color:Colors.blue),
// Container(color:Colors.yellow),
// Container(color:Colors.pink),
Container(child:GoogleMap(initialCameraPosition: CameraPosition(target:LatLng(0, 0)),)),
Container(child:GoogleMap(initialCameraPosition: CameraPosition(target:LatLng(0, 0)),)),
Container(child:GoogleMap(initialCameraPosition: CameraPosition(target:LatLng(0, 0)),)),
Container(child:GoogleMap(initialCameraPosition: CameraPosition(target:LatLng(0, 0)),))
],
);
}
}
Просмотр страницы работает некоторое время, но прерывается (на IOS), и эта ошибка (иногда) отображается в консоли:
[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: 'package:flutter/src/gestures/converter.dart': Failed assertion: line 155 pos 18: '!state.down': is not true.
#0 _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:40:39)
#1 _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:36:5)
#2 PointerEventConverter.expand (package:flutter/src/gestures/converter.dart:155:18)
#3 _SyncIterator.moveNext (dart:core/runtime/libcore_patch.dart:152:12)
#4 ListQueue.addAll (dart:collection/queue.dart:715:25)
#5 _WidgetsFlutterBindingamp;BindingBaseamp;GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:83:27)
#6 _rootRunUnary (dart:async/zone.dart:1136:13)
#7 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#8 _CustomZone.runUnaryGuarded (dart:async/zone.dart:931:7)
#9 _invoke1 (dart:ui/hooks.dart:223:10)
#10 _dispatchPointerDataPacket (dart:ui/hooks.dart:144:5
Кто-нибудь видел и исправил это?
Спасибо за ваше внимание..
Джон.
Комментарии:
1. Вы решили это? Меня интересует.
2. странно, я не могу воспроизвести эту ошибку в своей версии flutter.
3. вы должны обернуть свой виджет GoogleMap в контейнер, а затем добавить этот контейнер в контейнер просмотра страницы. Родительский контейнер предназначен для определения жестов.
4. Вы удаляете при навигации?
Ответ №1:
У меня была аналогичная проблема при работе с Google map в pageview, но после поиска в Интернете я получил решение, которое, наконец, сработало
Все, что я сделал, это поместил карту Google в виджет с отслеживанием состояния, использовал with AutomaticKeepAliveClientMixin
и @override bool get wantKeepAlive => true;
и вызвал в требуемом виджете Это виджет с отслеживанием состояния, содержащий карту Google
class GoogleMapWidget extends StatefulWidget{
const GoogleMapWidget({Key? key}) : super(key: key);
@override
_GoogleMapWidgetState createState() => _GoogleMapWidgetState();
}
class _GoogleMapWidgetState extends State<GoogleMapWidget> with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
@override
Widget build(BuildContext context) {
return Container(
child:GoogleMap(initialCameraPosition: CameraPosition(target:LatLng(0, 0)),)
);
}
}
Затем вы можете вызвать его со своей домашней страницы следующим образом
class Homepage extends StatelessWidget {
@override
build(BuildContext context){
return PageView(
children: <Widget>[
GoogleMapWidget(),
GoogleMapWidget(),
],
);
}
}
Я надеюсь, что это ответ, который вы ищете
Ответ №2:
не используйте Pageview
вместо этого используйте PageView.builder
, а затем создайте глобальный список
List latLong = [
// pass all google maps and latLong values here
];
затем itemBuilder
передайте latlong в соответствии с index
и не забудьте включить GestureDetector на ваших GoogleMaps, иначе он также будет прокручивать карту