Как перейти от 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;
  }

Это не лучшее решение, но хорошее начало, я думаю.

Другие вопросы по тегам