将数据从一个屏幕发送到另一屏幕抖动

时间:2019-02-25 09:00:30

标签: android ios 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)));
      }
    }
  }

通过使用上面的代码,我尝试发送数据,但是遇到诸如类型'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';
      }
    }

2 个答案:

答案 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>