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