Flutter - в CustomScrollView, как предотвратить отрисовку прокрученного виджета за закрепленным виджетом

Привет, я разработчик Android и начал переносить свое приложение на Flutter.

В Android, когда у вас есть CoordinatorLayout с расширенной панелью приложений, а прокручиваемое содержимое при прокрутке не отображается за панелью приложений.

Эта гифка демонстрирует поведение на Android и то, чего я хочу добиться на Flutter. Панель приложений и фоновая часть прокрученного содержимого прозрачны, чтобы пользователь мог видеть фоновое изображение, но прокручиваемое содержимое не проходит через панель приложений)

Это то, что я хочу делать во Flutter

Во флаттере я могу успешно воспроизвести этот макет, но проблема в том, что содержимое прокрутки отображается за AppBar.

введите описание изображения здесь

Есть ли способ не рисовать содержимое прокрутки за панелью приложения?

Это мой код на флаттер:

Stack(
  children: <Widget>[
    Background(image: 'assets/images/fondo_horario.webp'),
    Container(
      color: Colors.black.withOpacity(.3),
    ),
    Scaffold(
      backgroundColor: Colors.transparent,
      body: CustomScrollView(
        slivers: <Widget>[
          SliverAppBar(
            elevation: 0,
            floating: true,
            snap: true,
            backgroundColor: Colors.transparent,
            actions: <Widget>[
              IconButton(
                icon: Icon(Icons.more_vert),
                onPressed: () {},
              ),
            ],
            title: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text(
                          "HORARIO DE CURSOS DEL CICLO 2019B",
                          style: TextStyle(
                              fontSize: 9, fontWeight: FontWeight.bold),
                        ),
                  Text(
                          "TOTAL DE CRÉDITOS: 52",
                          style: TextStyle(
                              fontSize: 9, fontWeight: FontWeight.bold),
                        ),
                ],
              ),
            ),
          ),
          SliverPersistentHeader(
            pinned: true,
            delegate: BarraHorario(),
          ),
          SliverToBoxAdapter(
            child: CeldasHorario(),
          )
        ],
      ),
    ),
  ],
);

person Oscar Méndez    schedule 20.08.2019    source источник
comment
Почему бы вам просто не установить фиксированный цвет панели приложения на непрозрачный вместо прозрачного? ИМО, прозрачный AppBar должен позволять видеть его позади, как будто это правильно происходит с вами.   -  person Miguel Ruivo    schedule 23.08.2019
comment
Потому что это поведение, которое я хочу показать пользователям.   -  person Oscar Méndez    schedule 23.08.2019
comment
Я не понимаю. Но если вы хотите скрыть заднюю часть, используйте непрозрачный цвет вместо своего AppBar. Конечный результат будет таким же, правда?   -  person Miguel Ruivo    schedule 23.08.2019
comment
Поставил непрозрачный цвет фона и проблема решена ... это не то, что я ищу   -  person Oscar Méndez    schedule 23.08.2019
comment
Но это решение твоей проблемы. Не хотите лучше объяснить свой вариант использования?   -  person Miguel Ruivo    schedule 23.08.2019
comment
@MiguelRuivo Он хочет видеть фоновое изображение через AppBar   -  person Michael Pfaff    schedule 24.08.2019


Ответы (1)


Я думаю, вы можете попробовать добавить новый стек в свой старый.

Старый стек содержит фоновое изображение.

Для нового стека будет задано значение «Цвета.прозрачный», в котором будет содержаться ваша панель приложений и прокручиваемый контент. Таким образом, 2 из них будут прозрачными с вашим фоновым изображением, но панель приложений не будет прозрачной с вашим контентом.

Надеюсь, что это работает.

person hoangquyy    schedule 20.08.2019
comment
Не могли бы вы объяснить это еще немного, пожалуйста. Я искал ответ и весь день пробовал разные варианты. - person Oscar Méndez; 20.08.2019
comment
Извините, я забыл добавить это: старый стек содержит фоновое изображение и новый стек. Сначала фон, затем новый стек. - person hoangquyy; 20.08.2019
comment
Если в вашем новом стеке установлен прозрачный фон, тогда ваша панель приложений и контент будут прозрачными вместе с фоном, верно? Но в новом стеке не устанавливайте прозрачность для панели приложений, поэтому панель приложений не будет прозрачной для вашего контента. - person hoangquyy; 20.08.2019
comment
В новом стеке не устанавливайте прозрачность для панели приложений - person hoangquyy; 20.08.2019