Почему параметр flexibleSpace панели приложений Sliver должен принимать виджет с конструктором const?

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

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

Однако я хочу иметь слово «Поиск», а под ним я хочу, чтобы 3 IconButtons были равномерно распределены, когда страница (CustomScrollView) прокручивается, я хочу, чтобы 3 IconButtons были закреплены в верхней части 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... Есть идеи, как я могу добиться того, что я хочу?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
928
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

const SliverAppBar(...)

Использовать этот.

SliverAppBar(...)

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

Я не знаю, сработало ли это, потому что я использовал совершенно другой подход - но я одобряю - у меня также есть еще один вопрос: предположим, у меня есть SliverAppBar и SliverList, у которого есть SliverChildListDelegate, как мне прикрепить/закрепить первый дочерний элемент в SliverList в верхней части экрана, когда SliverAppBar прокручивается/схлопывается (за пределы экрана)?

RamanSB 30.05.2019 18:59

Другие вопросы по теме