Android 如何在颤振/省道中保存和传递变量/数据而无需导航?

Android 如何在颤振/省道中保存和传递变量/数据而无需导航?,android,ios,flutter,dart,Android,Ios,Flutter,Dart,我有一个名为“newstHomes”的页面,因此我从api收到了一个家庭列表,它将在这里列出。因此,对于每个家庭,我声明一个最喜欢的按钮。所以,当我想点击我最喜欢的按钮时,保存我的家庭id,不带导航,保存它并将其传递到另一个页面。 这是我的密码: return GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 1, childAspe

我有一个名为“newstHomes”的页面,因此我从api收到了一个家庭列表,它将在这里列出。因此,对于每个家庭,我声明一个最喜欢的按钮。所以,当我想点击我最喜欢的按钮时,保存我的家庭id,不带导航,保存它并将其传递到另一个页面。 这是我的密码:

return GridView.builder(
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 1, childAspectRatio: 3 / 1.5),
      itemCount: widget.item.length,
      itemBuilder: (context, index) {
        return InkWell(
          onTap: (){
            Navigator.of(context).push(MaterialPageRoute(
                builder: (context) => PropertyDetailsPage(),
                settings: RouteSettings(
                    arguments: widget.item[index]
                )
            ));
          },
          child: Align(
            alignment: Alignment.topCenter,
            child: SizedBox(
              width: MediaQuery.of(context).size.width / 1.04,
              height: MediaQuery.of(context).size.height / 5,
              child: Container(
                child: Stack(
                  children: [
                    Row(
                      children: [
                        FavoriteButton(
                          iconSize: MediaQuery.of(context).size.width / 10,
                          isFavorite: false,
                          valueChanged: (var isFave){
                            widget.favorite = isFave;
                            widget.propertyID = widget.item[index].Id;
                          },
                        ),
                        Padding(padding: EdgeInsets.only(right: MediaQuery.of(context).size.width / 15,
                        )),
                        Text(widget.item[index].Price,
                          style: TextStyle(
                              fontFamily: "IranSans",
                              fontSize: MediaQuery.of(context).size.width / 22
                          ),
                        ),
                      ],
                    ),
                    Align(
                      alignment: Alignment.center,
                      child: Padding(
                        padding: EdgeInsets.only(top: MediaQuery.of(context).size.height / 14,
                            left: MediaQuery.of(context).size.width / 30,
                            right: MediaQuery.of(context).size.width / 8
                        ),
                        child: Align(
                          alignment: Alignment.center,
                          child: Column(
                            children: [
                              Text(widget.item[index].Title,
                                textDirection: TextDirection.rtl,
                                style: TextStyle(
                                    fontSize: MediaQuery.of(context).size.width / 25,
                                    fontFamily: "IranSans"
                                ),
                              ),
                              Text(widget.item[index].Area.toString() + ' ' + 'متر مفید',
                                textDirection: TextDirection.rtl,
                                style: TextStyle(
                                    fontFamily: "IranSans",
                                    fontSize: MediaQuery.of(context).size.width / 29,
                                    color: Colors.grey[700]
                                ),
                              ),
                              Text(widget.item[index].DataInsert.toString(),
                                textDirection: TextDirection.rtl,
                                style: TextStyle(
                                    fontFamily: "IranSans",
                                    fontSize: MediaQuery.of(context).size.width / 29,
                                    color: Colors.grey[700]
                                ),
                              ),
                            ],
                          ),
                        ),
                      ),
                    ),
                    Row(
                      children: [
                        Padding(
                          padding: EdgeInsets.only(left: MediaQuery.of(context).size.width / 6),
                          child: Align(
                            alignment: Alignment.bottomLeft,
                            child: Text(widget.item[index].DataInsert.toString(),
                              textDirection: TextDirection.rtl,
                              style: TextStyle(
                                  fontFamily: "IranSans",
                                  fontSize: MediaQuery.of(context).size.width / 29,
                                  color: Colors.grey[700]
                              ),
                            ),
                          ),
                        ),
                      ],
                    ),
                    Align(
                      alignment: Alignment.centerRight,
                      child: SizedBox(
                        height: MediaQuery.of(context).size.height -3,
                        width: MediaQuery.of(context).size.width / 4,
                        child: Image.network('https://api.shaarapp.ir/ImageSave/' + widget.item[index].Image,
                          fit: BoxFit.fill,
                        ),
                      ),
                    ),
                  ],
                ),
                decoration: BoxDecoration(
                  border: Border.all(color: Colors.grey),
                ),
              ),
            ),
          ),
        );
      },
    );

您可以使用GestureDetector包装FavoriteButton小部件

代码将类似于:

GestureDetector(
  child: FavoriteButton(
  iconSize: MediaQuery.of(context).size.width / 10,
  isFavorite: false,
  valueChanged: (var isFave){
  widget.favorite = isFave;
  widget.propertyID = widget.item[index].Id;
  },
),
onTap: () {
  /// Your favorite logic here.
}),
用于让其他小部件知道您喜爱的id的值。您可以使用dependency

其概念是您可以创建一个类来保存收藏夹id和其他值,如扩展ChangeNotifier

    class MyFavoriteData extends ChangeNotifier {
      List<String> _ids = [];
    
      UnmodifiableListView<Post> get ids {
        return UnmodifiableListView(this._ids);
      }

      void addFavorite(String id) {
         this._ids.add(id);
         notifyListeners();
      }
      
      void removeFavourite(String id) {
         this._ids.remove(id);
         notifyListeners();
      }
}
最后。当您想要收听MyFavoriteData时。您可以使用消费者小部件,如下所示:

return Consumer<MyFavoriteData>(
  builder: (context, myFavoriteData, child) {
    return Text("All favorite ids: ${myFavoriteData.ids}");
  },
);
返回消费者(
生成器:(上下文,myFavoriteData,子级){
返回文本(“所有收藏夹ID:${myFavoriteData.ids}”);
},
);

快乐编码:)

谢谢你,兄弟,我得到了一些东西,但我是新来的颤振,你能提供这个代码到我的代码吗?嗨@AshkanAA,我想你可以访问这个文档,看看里面的示例项目。有很多信息。但如果你卡住了,只需发表评论并询问社区即可。
return Consumer<MyFavoriteData>(
  builder: (context, myFavoriteData, child) {
    return Text("All favorite ids: ${myFavoriteData.ids}");
  },
);