(Не дубликат) Замедленная прокрутка во Flutter :(Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 (Не дубликат) Замедленная прокрутка во Flutter :(

Сообщение Anonymous »

У меня есть такая структура приложения:

Код: Выделить всё

  Scaffold(
extendBody: true,
extendBodyBehindAppBar: false,
body: NotificationListener(
onNotification: _handleScrollNotification,
child: CustomScrollView(
controller: _scrollController,
physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),
slivers: [
SliverAppBar(
floating: true,
snap: false,
pinned: true,
// Some code here
),
CupertinoSliverRefreshControl(
// Some code here
),
SliverList(
delegate: SliverChildBuilderDelegate(
childCount: 1,
// addAutomaticKeepAlives: true,
(context, index) => Container(
padding: screenContentPadding,
child: SingleChildScrollView(
child: Column(
children: [
Center(
child: SizedBox(
// height: MediaQuery.sizeOf(context).height,

// Problem lies down here
child: MasonryGridView.count(
primary: false,
shrinkWrap: false,
cacheExtent: 100.0,
addAutomaticKeepAlives: false,
crossAxisCount: 2,
itemBuilder: (context, index) {
return items[index];
},
),
),
),
],
),
),
),
),
),
],
),
),
),
Я использую плагин Flutter для просмотра шахматной сетки, и из этого плагина я использовал класс MasonryGridView.
Из того, что я сделал читай, без термоусадочной оболочки элементы длинного списка не будут отображаться все сразу, а только видимые. Это моя цель для MasonryGridView, в котором у меня много элементов.
Поначалу, когда я установил для термоусадки значение true, единственной проблемой, с которой я столкнулся, была проблема с рендерингом (запаздывающее поведение), с которой я столкнулся. хотел бы исправить.
Но когда я установил для термоусадки значение false, он сказал, что у меня неограниченная высота или что-то в этом роде, поэтому я раскомментировал эту строку:

Код: Выделить всё

... height: MediaQuery.sizeOf(context).height, ...
виджета SizedBox().
Он больше не жалуется на неограниченную высоту, но теперь мой sliverAppBar не работает так, как раньше предполагалось.
Поэтому я попытался поместить NeverScrollableScrollPhysics() в качестве физического параметра для класса MasonryGridView. SliverAppBar работает нормально, но теперь я получаю обрезанный вид элемента (из MasonryGridView), поскольку MediaQuery.sizeOf(context).height охватывает только некоторые элементы. Затем я попытался увеличить длину SizedBox на основе высоты дочерних элементов MasonryGridView, больше не зависящей от MediaQuery.sizeOf(context).height, но теперь термоусадочная пленка не работает , он возвращается к рендерингу всех элементов одновременно.
Я думаю, это потому, что теперь flutter думает, что вся область SizedBox (которая охватывает все дочерние элементы MasonryGridView ) действовал так, как если бы это было все видимое представление, поэтому теперь он отображает все дочерние элементы в видимом представлении одновременно.
Как исправить такое замедленное поведение?
Примечание: я думаю, это не дублирующий вопрос. Речь идет не о текстовом виджете, и упаковка MasonryGridView в Flexible не помогает. Есть ли кто-нибудь, кто мог бы мне помочь с этим...?

Подробнее здесь: https://stackoverflow.com/questions/790 ... in-flutter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»