在2个不同的ScopedModels之间切换时,如何使用相同的模型?

时间:2019-05-09 08:32:01

标签: flutter scoped-model

我正在尝试为我的Flutter应用创建平板电脑布局-左侧是我的列表,右侧是我的详细信息视图。我正在使用ScopedModel处理列表中的状态。我有两个使用相同模型的列表-OfferList和StoreList-每个列表都有一个ScopedModelDescendant用于详细视图。

到目前为止,一切正常。在每个详细信息视图中,我链接另一个详细信息视图,这意味着在我的商店详细信息视图中,我列出了商店拥有的所有商品,当您点击其中一个商品时,您将重定向到具有商品详细信息视图的OfferList,每个商品详细信息视图都具有链接重定向到具有此优惠的相应商店的详细信息视图的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,但是随后我仅收到“ getter'xxx'在null上调用”的信息。例外并点击其他报价仍不会更新我的详细信息视图。

当我从要约转到相应商店时,也会发生同样的事情。

当我从菜单转到列表/详细视图时,浏览列表并更新详细视图效果很好,但是当我从一个列表/详细视图转到另一个视图/细节视图时,这是行不通的。

0 个答案:

没有答案