![](/img/trans.png)
[英]I want to pass data from one screen to another screen in flutter and save the data to ListView/ListTiles
[英]send data from one screen to another screen flutter
我正在尝试将数据从一个屏幕传递到另一屏幕。
List<SubCategoryData>categoryNames = new List<SubCategoryData>();
List<String>categorieslist = [];
bool isFirst=true;
Future<SubCategoryModel>fetchCategories(BuildContext context) async {
String url = "http://106.51.64.251:380/onnet_api/subcatListByCategory.php";
var body = new Map<String,String>();
body['publisherid']= 102.toString();
body['tag'] = "category";
body['subtag']= "list";
body['parentId'] = 10.toString();
http.Response res = await http.post(url,body: body);
final categoryjsondata = json.decode(res.body);
var map = Map<String,dynamic>.from(categoryjsondata);
var categoryResponse = SubCategoryModel.fromJson(map);
if(res.statusCode == 200){
print('category Response: $categoryResponse');
if(categoryResponse.status == 1){
//final categoryModel = json.decode(res.body);
var data = categoryjsondata['data']as List;
print('category data: $data');
/* for(var model in categorieslist){
categoryNames.add(new SubCategoryData.fromJson(model));
}*/
/* SharedPreferences prefs = await SharedPreferences.getInstance();
print("cat List Size: $categories");
prefs.setStringList("categorylist", categories);*/
Navigator.push(context, MaterialPageRoute(builder: (context)=> ChewieDemo(imageData: images[0],
categoryData:data)));
}
}
}
通过使用上面的代码,我试图发送数据,但是我遇到的问题是类型“列表”不是类型转换中类型“ SubCategoryData”的子类型。
出现错误,甚至我都没有如何使用索引值发送数据。请让我知道。
下面是我的ChewieDemo类:在这里,我试图从另一个类接收数据。
class ChewieDemo extends StatefulWidget {
final Datum imageData;
final SubCategoryData categoryData;
ChewieDemo({this.title = 'Player',Key key,@required this.imageData,@required this.categoryData}): super(key:key);
final String title;
@override
State<StatefulWidget> createState() {
return _ChewieDemoState();
}
}
class _ChewieDemoState extends State<ChewieDemo> {
TargetPlatform _platform;
VideoPlayerController _videoPlayerController1;
VideoPlayerController _videoPlayerController2;
ChewieController _chewieController;
@override
void initState() {
super.initState();
print('url player :${widget.imageData.dataUrl}');
print(widget.categoryData);
// 'https://www.sample-videos.com/video123/mp4/480/big_buck_bunny_480p_20mb.mp4'
_videoPlayerController1 = VideoPlayerController.network('${widget.imageData.dataUrl}');
_chewieController = ChewieController(
videoPlayerController: _videoPlayerController1,
aspectRatio: 3 / 2,
autoPlay: true,
looping: true,
// Try playing around with some of these other options:
// showControls: false,
// materialProgressColors: ChewieProgressColors(
// playedColor: Colors.red,
// handleColor: Colors.blue,
// backgroundColor: Colors.grey,
// bufferedColor: Colors.lightGreen,
// ),
// placeholder: Container(
// color: Colors.grey,
// ),
// autoInitialize: true,
);
}
这是SubCategoryData的模型类。
class SubCategoryData {
int id;
int parentId;
String name;
int contentCount;
String createdAt;
int status;
SubCategoryData({
this.id,
this.parentId,
this.name,
this.contentCount,
this.createdAt,
this.status,
});
factory SubCategoryData.fromJson(Map<String, dynamic> json) => new SubCategoryData(
id: json["id"],
parentId: json["parent_id"],
name: json["name"],
contentCount: json["content_count"],
createdAt: json["createdAt"],
status: json["status"],
);
Map<String, dynamic> toJson() => {
"id": id,
"parent_id": parentId,
"name": name,
"content_count": contentCount,
"createdAt": createdAt,
"status": status,
};
@override
String toString() {
// TODO: implement toString
return '$id $parentId $name $contentCount';
}
}
1.添加依赖项
在开始之前,您需要将shared_preferences插件添加到pubspec.yaml文件中:
content_copy
dependencies:
flutter:
sdk: flutter
shared_preferences: "<newest version>"
2.保存数据
要保留数据,请使用SharedPreferences类提供的setter方法。 Setter方法可用于各种原始类型,例如setInt,setBool和setString。
设置器方法有两件事:第一,同步更新内存中的键值对。 然后,将数据持久保存到磁盘。
// obtain shared preferences
final prefs = await SharedPreferences.getInstance();
// set value
prefs.setInt('counter', counter);
3.读取数据
要读取数据,请使用SharedPreferences类提供的适当的getter方法。 对于每个设置器,都有一个对应的getter。 例如,可以使用getInt,getBool和getString方法。
final prefs = await SharedPreferences.getInstance();
// Try reading data from the counter key. If it does not exist, return 0.
final counter = prefs.getInt('counter') ?? 0;
4.删除数据
要删除数据,请使用remove方法。
content_copy
final prefs = await SharedPreferences.getInstance();
prefs.remove('counter');
你得到的名单SubCategoryData
从httpcall
。 如果你需要传递一个List
您的SubCategoryData
模型,你需要首先解决在以下ChewieDemo
类
class ChewieDemo extends StatefulWidget {
final Datum imageData;
final List<SubCategoryData> categoryData;
ChewieDemo({this.title = 'Player',Key key,@required this.imageData,@required this.categoryData}): super(key:key);
final String title;
@override
State<StatefulWidget> createState() {
return _ChewieDemoState();
}
}
当您按下以下命令时:
var categoryData = categoryjsondata['data'] as List;
print('category data: $categoryData');
for(var model in categoryData){
categoryNames.add(new SubCategoryData.fromJson(model));
}
print("cat List Size: $categoryData");
Navigator.push(context, MaterialPageRoute(builder: (context)=> ChewieDemo(imageData: null, categoryData: categoryNames));
其中categoryNames是一个List<SubCategoryData>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.