ScrollablePositionedList с SliverAppBar не работает должным образом - PullRequest
3 голосов
/ 31 января 2020

Это репозиторий для создания минимального воспроизводимого примера .

Я хочу скрыть SliverAppBar, когда прокручивается ScrollablePositionedList.builder. Это соответствующий фрагмент кода, который я включаю здесь.

          NestedScrollView(
              headerSliverBuilder: (context, innerBoxIsScrolled) => [
                    SliverAppBar(
                      backgroundColor: Colors.blue,
                      expandedHeight: 112,
                      snap: true,
                      pinned: false,
                      floating: true,
                      forceElevated: true,
                      actions: <Widget>[
                        IconButton(
                          icon: Icon(Icons.event),
                        )
                      ],
                      flexibleSpace: SafeArea(
                        child: Column(
                          children: <Widget>[
                            Container(
                              height: kToolbarHeight,
                              child: Column(
                                crossAxisAlignment: CrossAxisAlignment.center,
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: <Widget>[
                                  Text(
                                    'Title',
                                    style: Theme.of(context)
                                        .textTheme
                                        .title
                                        .copyWith(
                                            fontSize: 16, color: Colors.white),
                                  ),
                                  SizedBox(
                                    height: 2,
                                  ),
                                  Text(
                                    'Date',
                                    style: Theme.of(context)
                                        .textTheme
                                        .caption
                                        .copyWith(
                                            fontSize: 10, color: Colors.white),
                                  ),
                                  SizedBox(
                                    height: 2,
                                  ),
                                  Text(
                                    'Another Text',
                                    style: Theme.of(context)
                                        .textTheme
                                        .subtitle
                                        .copyWith(
                                            fontSize: 14, color: Colors.white),
                                  ),
                                ],
                              ),
                            ),
                            Expanded(
                              child: Container(
                                height: kToolbarHeight,
                                width: MediaQuery.of(context).size.width,
                                color: Colors.white,
                                child: Row(
                                  mainAxisAlignment:
                                      MainAxisAlignment.spaceEvenly,
                                  children: <Widget>[
                                    Text(
                                      'Prev',
                                    ),
                                    Text(
                                      'Next',
                                    )
                                  ],
                                ),
                              ),
                            )
                          ],
                        ),
                      ),
                    )
                  ],
              body: ScrollablePositionedList.builder(
                  physics: ScrollPhysics(),
                  itemPositionsListener: itemPositionListener,
                  itemScrollController: _itemScrollController,
                  initialScrollIndex: 0,
                  itemCount: 500,
                  itemBuilder: (BuildContext ctxt, int index) {
                    return Container(
                        margin: EdgeInsets.all(16)
                        ,
                        child: Text('$index'));
                  })),

Я пробовал два подхода, пока ни один из них не работает должным образом,

Подход 1

Я добавил physics: ScrollPhysics(), к ScrollablePositionedList.builder

Вывод:

enter image description here

Appraoch 2

Я добавил physics: NeverScrollableScrollPhysics(), к ScrollablePositionedList.builder

SliverAppBar скрывает это время, но теперь я не могу прокрутить до самого конца ScrollablePositionedList.builder У меня есть 500 пунктов в моем списке но он прокручивает только до 14-го элемента, смотрите вывод. Кроме того, он слишком сильно запаздывает при прокрутке

Вывод:

enter image description here

Заранее спасибо.

1 Ответ

3 голосов
/ 04 февраля 2020

Отвечая на вопрос сам

Эта проблема не имеет решения. Я создал проблему здесь

Похоже, ScrollablePositionedList с SliverAppBar не может работать, пока Команда флаттера не добавит shrinkwrap свойство для ScrollablePositionedList.

Запрос на добавление функции shrinkwrap создан здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...