У меня есть приложение Flutter, и главный экран приложения — это Scaffold с телом PageView — BottomNavigationBar с четырьмя дочерними элементами:
Код: Выделить всё
// page declaration
@override
void initState() {
super.initState();
_children = [
const Page1(),
const Page2(),
const Page3(),
const Page4(),
];
}
// body
SafeArea(
child: PageView(
physics: NeverScrollableScrollPhysics(),
controller: _pageController, // just a PageController
children: _children,
onPageChanged: _onPagechanged,
),
)
// bottom nav bar
BottomNavigationBar(
showSelectedLabels: false,
showUnselectedLabels: false,
backgroundColor: Colors.white,
type: BottomNavigationBarType.fixed,
items: [
icon1, icon2, icon3, icon4,
],
currentIndex: _selectedIndex,
onTap: _onItemTapped,
)
int _selectedIndex = 0; // starts at 0
void _onItemTapped(int index) {
_pageController.jumpToPage(index);
}
void _onPagechanged(int index) {
setState(() => _selectedIndex = index);
}
Код: Выделить всё
@override
bool get wantKeepAlive => true;
Код: Выделить всё
@override
void initState() {
_loadImage();
super.initState();
}
Future _loadImage() async {
final resourcePath = widget.item.imageUrl;
final up = Provider.of(context, listen: false);
final fbss = FirebaseStorageService(up.uid);
final image = await fbss.getResourceWithCache(resourcePath, isItem: true, saveToCache: false);
setState(() {
_image = image;
_isLoaded = true;
});
}
Проблема
Всякий раз, когда я перехожу от одного экрана к другому, а затем возвращаюсь назад, те виджеты, которые выполняют вызовы API и загружают изображения, мигают серым, а затем изображение снова рисуется на виджете. Почему это? Есть ли способ загрузить его, чтобы этого не произошло? Я знаю, что всякий раз, когда я меняю экран, я смотрю на виджет, который удерживает каркас с нижней панелью навигации, перестраивается из-за изменения состояния, но почему из-за этого кажется, что изображения перестраиваются? Я проверил, что эти виджеты с изображениями не на самом деле перестраиваются, но похоже, что они это делают. Я хотел бы предотвратить такое поведение. Нужно ли мне использовать маршруты и навигатор на своих страницах? Что поможет предотвратить появление перезагрузки при каждом переключении пользователя между экранами?
Подробнее здесь: https://stackoverflow.com/questions/779 ... in-flutter
Мобильная версия