Потеряно состояние FloatingActionButton при изменении портрета на Landsacpe - PullRequest
0 голосов
/ 09 мая 2020

Я создаю приложения, которые содержат плавающую кнопку действия, которую я сделал с моей собственной настройкой, при ее нажатии под ней отображаются 3 значка меню.

Есть 2 проблемы:

  1. Когда ориентация меняется на альбомную, и мы нажимаем плавающую кнопку действия, она не отображается, вместо этого она будет отображаться, когда мы долго нажимаем, продолжить нет 2
  2. В текущей альбомной ориентации он отображается при долгом нажатии, как я уже сказал 1, и когда мы снова вернемся к портретному режиму, его нужно снова нажать и удерживать, чтобы он отобразился

Я пробовал несколько способов исправить это, но это все еще не работает.

Вот код и снимок экрана

При отображении портретного меню

При переключении на альбомную ориентацию значки меню отсутствуют, и нужно долго нажимать, чтобы сделать это show

for floatingActionButton

    floatingActionButton: OrientationBuilder(
        builder: (BuildContext context, Orientation orientation){
           return orientation == Orientation.landscape
           ? _buildMenu(context)
           : _buildMenu(context);
        },
      ),

_buildMenu (), который вызывает floatActionButton

Widget _buildMenu(BuildContext context){
final icons = [ Icons.swap_vert, Icons.check_circle_outline, Icons.filter_list ];   
var nowOrientation = MediaQuery.of(context).orientation;

var b = Container(
  child: LayoutBuilder(
    builder: (BuildContext context, BoxConstraints constraints){
      return OverlayBuilder(
        showOverlayTrue: true,
        overlayBuild: (BuildContext overlayContext){
          RenderBox box = context.findRenderObject() as RenderBox;
          final center = box.size.center(box.localToGlobal(const Offset(0.8, 0.8)));

           return new Positioned(
            top: Offset(center.dx, center.dy - icons.length * 35.0).dy,
            left: Offset(center.dx, center.dy - icons.length * 35.0).dx,
            child: new FractionalTranslation(
              translation: const Offset(-0.5, -0.6),
              child: FabIcons(
                icons: icons,
              ),
            ),
          );
        },
      );
    },
  ),
);}

Чтобы упростить просмотр, я поместил код на github

OverlayBuilder Class https://github.com/ubaidillahSriyudi/StackOverflowhelp/blob/master/OverlayBuilderClass

Fabic ons Class https://github.com/ubaidillahSriyudi/StackOverflowhelp/blob/master/FabIcons

Большое спасибо тому, кто смог помочь

1 Ответ

0 голосов
/ 09 мая 2020

Происходит, потому что каждый раз, когда вы меняете ориентацию, ваш FloatingActionButton перестраивает и теряет состояние.

Вы должны найти способ сохранить состояние виджета FabIcons.


Простое решение:

Создание виджета FabIcons с помощью

 icons,
 iconTapped; 

Эти переменные должны быть сохранены в родительском виджете, поэтому каждый раз, когда вы вызываете _buildMenu(context);, вы передать эти переменные

...