как отображать только страницы pageView после завершения скользящей анимации

в своем приложении я использую тяжелые страницы, на которых есть что показать, изображения для рендеринга и многое другое, при скольжении происходит то, что моя анимация скольжения будет шататься, пока моя страница рендерится в середине пролистывания, я хочу минимизировать этот эффект.

Я хочу, чтобы на странице по умолчанию отображался определенный виджет (предпочтительно один контейнер с цветом bg, мерцанием или любым заполнителем, который я могу выбрать), а затем, когда анимация скольжения завершится, данные, которые вычисляются в фоновом режиме появится. вот так, мне не нужно будет видеть дергающуюся анимацию при смахивании.

есть ли какой-либо способ сделать это, кроме необходимости вручную использовать streambuilders для прослушивания контроллера pageView?


person Kaki Master Of Time    schedule 26.12.2020    source источник
comment
Поделитесь, пожалуйста, кодом для PageView!   -  person ASAD HAMEED    schedule 27.12.2020


Ответы (2)


Добавьте задержку к страницам, равную продолжительности анимации PageView.

1. создать переменную,

final duration = Duration(milliseconds: 600);

2. добавить задержку на страницу (),

Future.delayed(duration, () => Page() );

3. оживить другую страницу,

_pageController.animateToPage(
  1,
  duration: duration,
  curve: Curves.easeInOut,
);
person ASAD HAMEED    schedule 26.12.2020
comment
это не очень помогает, если у меня нет ручного управления скольжением. также я не могу получить или установить скорость смахивания на контроллере просмотра страницы - person Kaki Master Of Time; 26.12.2020
comment
Сможете ли вы разделить все, что связано с PageView? - person ASAD HAMEED; 26.12.2020

вы можете попробовать это, preload_page_view, будет предварительно загружен просмотр страницы вне экрана ~

[EDITED] Альтернатива, что, если вы поместите только контекст, когда index == onchangedIndex, что-то вроде,

int _currentIndex = 0;

PageView.builder(
  onPageChanged: (index){
    //Even you can use here Future.delay to delay a second after onPageChanged, if loading your content is too quick
                              setState(() {
                                _currentIndex = index;
                              });
                            },
  itemBuilder: (context, index){
    return _currentIndex == index ? //your content : Container(/*with background color*/);
}
person Jim Chiu    schedule 28.12.2020
comment
Я действительно пробовал это, но это плохо сказывается на производительности и дряблости моего приложения - person Kaki Master Of Time; 28.12.2020
comment
обновлен с новым подходом - person Jim Chiu; 28.12.2020