Флаттер: как сохранить виджет с Google Map без изменений? - PullRequest
0 голосов
/ 14 января 2019

Я использую Google Maps для флаттера виджет. В моем приложении карта отображается через одну из вкладок BottomNavigationBar.

А у меня следующая проблема:

  1. пользователь на вкладке Карты
  2. пользователь меняет вкладку (нажав на другую)
  3. [ПРОБЛЕМА], когда пользователь возвращается на вкладку карты, перерисовывает карту.

Я хотел бы сохранить карту такой, какая она есть, когда пользователь покидает вкладку Карты, чтобы он мог продолжать работать с ней, когда вернется к ней позже.

Пытался:

  • использовать PageStorage - безуспешно.
  • сделать что-то вроде состояния Singletone of Map - без успеха.
  • использовать AutomaticKeepAliveClientMixin ( видел здесь ), что выглядело многообещающе, но все еще безуспешно.

(Я признаю, что мог сделать что-то не так)

Код последней попытки:

class MapScreen extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => MapScreenState();
}

class MapScreenState extends State<MapScreen> with AutomaticKeepAliveClientMixin {
  GoogleMapController mapController;

  @override
  bool get wantKeepAlive => true;

  @override
  Widget build(BuildContext context) {
    super.build(context);
    return Scaffold(
        appBar: AppBar(
          title: const Text("Map"),
        ),
        body: GoogleMap(
          onMapCreated: _onMapCreated,
        )
    );
  }

  void _onMapCreated(GoogleMapController controller) {
      mapController = controller;
      updateKeepAlive();
  }
}

Итак, мне просто нужен способ сохранить MapScreen живым и неизменным или как-то сохранить его состояние и восстановить его, когда пользователь вернется в MapScreen. Или что-то еще, что решит проблему.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Имейте в виду, что виджет Google Maps находится в состоянии предварительного просмотра разработчика в версии 0.2. Некоторое поведение может меняться со временем. Пока не используйте это в производстве.

0 голосов
/ 14 января 2019

Widget всегда перестраивать после перехода со страницы на страницу, поэтому попробуйте это, используйте переменную для GoogleMap и используйте повторно, если она отличается от нуля.

    GoogleMap _map;

     @override
    Widget build(BuildContext context) {
      if (_map == null){
        _map =  GoogleMap(
            onMapCreated: _onMapCreated,
          );
      }
      return Scaffold(
          appBar: AppBar(
            title: const Text("Map"),
          ),
          body:_map,
      );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...