динамически переключать физическую форму прокрутки никогда не прокручивать для прокрутки - PullRequest
0 голосов
/ 05 мая 2020

Название может быть не совсем точным, но простите меня, я действительно не знаю, что написать. Я пытаюсь создать эффект, при котором элементу noScroll phyicas Listview, который вложен с другими элементами в SingleChildScrollView, необходимо будет перейти на прокручиваемую физику, когда он достигнет вершины SingleChildScrollView (таким образом, занимая весь вид ), чтобы использовать отложенную загрузку элементов.

Я должен сказать, что я пытался избежать перестройки вложенного Listview из-за этой стоимости и особенно затрат на его построение с помощью физики NeverScrolling, поскольку это остановило бы основной поток пользовательского интерфейса до тех пор, пока не будут созданы все элементы.

Необходимость использования физики NeverScrolling в первую очередь, чтобы позволить SingleChildScrollView правильно прокручивать (если для просмотра списка выбрана обычная прокрутка, SingleChildScrollView не сможет прокручивать, если жест исходит из вложенного Listview)

Мой код выглядит так:

SingleChildScrollView(
                scrollDirection: Axis.vertical,
                child: Material(
                  child: Container(
                    child: Column(
                      children: <Widget>[
                        ItemListDevider(),
                        Container(
                          height: 120,
                          child: Container(height:120)
                        ),
                        ItemListDevider(),
                        Flexible(
                          fit: FlexFit.loose,
                          child: THeWidgetHoldingTheListView(album),
                        )

                      ],
                    ),
                  ),
                ),
              )
// the build method of the THeWidgetHoldingTheListView widget would return this :
 Container(
          child: Row(
            mainAxisSize: MainAxisSize.max,
            children: <Widget>[
              Expanded(
                child: Column(
                  children: <Widget>[
                    Flexible(
                      child: ListView.builder(
                        controller: controller,
                        shrinkWrap: true,
                        itemExtent: FixedItemExtent,
                        physics: AlwaysScrollableScrollPhysics(),
                        itemCount: FixedItemCount,
                        itemBuilder: (context, index) {
                          return MyCard()
                        },
                      ),
                    ),
                  ],
                ),
              ),
              MyScrollbar(
                controller: controller,
              ),
            ],
          ),
        )

* Примечание: * У меня была идея создать собственный ScrollPhysics, который начинается как NeverScrollPhysics и переключатели на определенное смещение прокрутки, но это не изменит того факта, что я должен загружать весь список как Neverscroll и, таким образом, останавливать основной поток пользовательского интерфейса.

Есть ли способ обойти это изменение физики прокрутки, если нет, как я могу реализовать его без ущерба для производительности, как упомянуто выше.

...