Я пытаюсь создать макет планшета для своего приложения для флаттера - с левой стороны - мой список, а с правой - мой подробный вид.Я использую 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 »был вызван на ноль».исключение и касание другого предложения по-прежнему не обновят мой подробный вид.
То же самое происходит, когда я перехожу из предложения в соответствующий магазин.
Переход по списку и обновление подробного представленияотлично работает, когда я перехожу из меню в список / подробный вид, просто не работает, когда я перехожу из одного списка / подробный вид в другой.