Почему параметр FlexibleSpace панели приложения Sliver должен использовать виджет с конструктором const? - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь создать пользовательский вид прокрутки, который содержит небольшую панель приложений для достижения чего-то похожего на то, что показано здесь:

https://medium.com/@diegoveloper/flutter-collapsing-toolbar-sliver-app-bar-14b858e87abe

Тем не менее, я хочу иметь слово «Поиск», а под ним я хочу, чтобы 3 кнопки «IconButton» были равномерно распределены, когда страница (CustomScrollView) прокручивается, я хочу, чтобы 3 кнопки «IconButton» были закреплены в верхней части панели SliverAppBar и текст поиска исчез ...

Я пытался добиться вышеуказанного с помощью следующего кода:

 class SearchPage extends StatelessWidget {

      const SearchPage();

      @override
      Widget build(BuildContext context) {
        return CustomScrollView(slivers: <Widget>[
        const SliverAppBar(
        pinned: true,
            expandedHeight: 250.0,
            flexibleSpace: _buildSliverAppBarFlex(),
            );
      }


       Widget _buildSliverAppBarFlex() {
        return Container(
            child: Column(
              children: <Widget>[
                Text("Search", style: TextStyle(fontSize: 24.0,
                    color: Colors.white,
                    fontWeight: FontWeight.bold)),
                Row(children: <Widget>[
                  IconButton(icon: Icon(Icons.flight)),
                  IconButton(icon: Icon(Icons.hotel)),
                  IconButton(icon: Icon(Icons.drive_eta))
                ])
              ],
            )
        );
      }
    }

Однако я получаю предупреждение о том, что FlexibleSpace должен принимать виджет конструктора const, и что созданный мной виджет _buildSilverAppBarFlex не является - я не могу добавить к нему также const или final ... Есть идеи, как мне достичь того, чего я хочу?

1 Ответ

1 голос
/ 29 мая 2019

Предупреждение приходит, потому что вы используете const перед вашим SliverAppBar, удалите это, и предупреждение исчезнет.

Итак, вместо этого

const SliverAppBar(...)

Используйте это.

SliverAppBar(...)

Если вы хотите использовать const, убедитесь, что ваш FlexibleSpaceBar также является const.

...