Как перейти от ChangeNotifier?
Я узнаю о provider
+ ChangeNotifier
для управления состоянием, но я не могу найти никакого официального руководства о том, как реализовать навигацию с ChangeNotifier
,
Допустим, мы улучшаем provider_shopper
образец здесь, поэтому, когда пользователь нажимает кнопку "Купить", CartModel
делает некоторую логику покупки, а затем переходит на страницу обзора заказа. Как эта навигация должна быть реализована?
Предоставляем ли мы обратный звонок для CartModel
, так он будет вызывать и запускать навигацию по интерфейсу?
1 ответ
Возможно, существует более простое и элегантное решение, но я мог бы подумать только об использовании одной страницы и обойтись без Навигатора:
@override
Widget build(BuildContext context) {
final appProvider = Provider.of<AppProvider>(context);
switch (appProvider.getCurrentPage()) {
case 'home': return homePage(appProvider);break;
case 'test': return testPage(appProvider,context);break;
}
return homePage(appProvider);
}
Каждая "страница" - это просто функция, которая возвращает Wigdet(скаффолд):
Widget testPage(AppProvider appProvider,BuildContext context) {
return WillPopScope(
onWillPop: () {return controlBackButton(appProvider,context);},
child: Scaffold(
appBar: AppBar(
title: Text('Test Page'),
),
Изменение страницы:
void changePage(AppProvider appProvider,String page) {
setState(() {
appProvider.setCurrentPage(page);
});
}
Все страницы, кроме домашней, должны быть обернуты в виджет WillPopScope, чтобы кнопка "Назад" переместилась на главный экран:
Future<bool> controlBackButton(AppProvider appProvider) async{
setState(() {
appProvider.setCurrentPage('home');
});
return false;
}
Это не лучшее решение, но хорошее начало, я думаю.