Как использовать одну и ту же модель при переключении между двумя разными ScopedModels? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать макет планшета для своего приложения для флаттера - с левой стороны - мой список, а с правой - мой подробный вид.Я использую ScopedModel для обработки состояний при нажатии на список.У меня есть два списка, которые используют одну и ту же модель - OfferList и StoreList - и каждый список имеет ScopedModelDescendant для подробного просмотра.

Пока все работает нормально.В каждом подробном представлении я связываю другой подробный вид, то есть в подробном представлении моего магазина я перечисляю все предложения, которые есть в магазине, и когда вы нажимаете на одно, вы перенаправляетесь в список предложений с подробным представлением предложения, и в каждом подробном представлении предложения есть ссылка, котораяперенаправляет в StoreList с подробным представлением соответствующего магазина, в котором есть это предложение.Однако, когда я получаю перенаправление и нажимаю на другой магазин или предлагаю подробный вид, больше не обновляется.Я застрял в этом подробном представлении, хотя мои поля обновляются.

Я попытаюсь объяснить, что я имею в виду, и попытался показать вам, что происходит, когда я перехожу от подробного представления магазина к предложению.подробное представление:

widget.model.offer = offer;
          Navigator.pop(context);
          Navigator.of(context).push(new MaterialPageRoute<void>(
              builder: (_) => OfferList(
                    model: widget.model, offer: offer, store: widget.model.store,
                  )));

Вот как я получаю данные при поступлении в OfferList:

if(widget.offer!=null&&widget.store!=null) {
model.offer=widget.offer;
model.store=widget.store;
                  }
return Row(children: <Widget>[
                  Expanded(child: _buildSuggestions(context, snapshot)),
                  Expanded(child: OfferDetails(offer: model.offer,store: model.store,model: model,))
                ],);

Я знаю, что передача модели, model.store и model.offer является избыточной.Это просто результат того, что я пытался выяснить, почему это не работает.Раньше я передавал только модель.

Наконец, вот как я обрабатываю данные в ScopedModelDescendant в моем подробном представлении:

return ScopedModelDescendant<StoreModel>(
          builder: (context, child, model) {
            return Stack(
                children: <Widget>[
                  CustomScrollView(
                    slivers: <Widget>[
                      SliverList(
                          delegate: SliverChildListDelegate([
                        topContentPortrait(context, widget.model.offer),
                        bottomContent(context, widget.model.offer)
                      ])),
                    ],
                  ),
//...
                ],
              );});

Я пытался использовать model.offer (используя модель ScopedModelDescendant) вместо widget.model, но тогда я получаю только «Получатель« xxx »был вызван на ноль».исключение и касание другого предложения по-прежнему не обновят мой подробный вид.

То же самое происходит, когда я перехожу из предложения в соответствующий магазин.

Переход по списку и обновление подробного представленияотлично работает, когда я перехожу из меню в список / подробный вид, просто не работает, когда я перехожу из одного списка / подробный вид в другой.

...