我正在尝试将数据从一个屏幕传递到另一屏幕。
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)));
}
}
}
通过使用上面的代码,我尝试发送数据,但是遇到诸如类型'List'不是类型转换中'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';
}
}
答案 0 :(得分:0)
1。添加依赖项
在开始之前,您需要将shared_preferences插件添加到pubspec.yaml文件中:
content_copy
dependencies:
flutter:
sdk: flutter
shared_preferences: "<newest version>"
2。保存数据
要保留数据,请使用SharedPreferences类提供的setter方法。 Setter方法可用于各种原始类型,例如setInt,setBool和setString。
Setter方法可做两件事:首先,同步更新内存中的键值对。然后,将数据持久保存到磁盘。
// 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');
答案 1 :(得分:0)
您将从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>