【问题标题】:How to implement an image in a JsonSerializable model class如何在 JsonSerializable 模型类中实现图像
【发布时间】:2019-06-14 04:43:11
【问题描述】:

我需要能够使用 API 检索和存储图像。对于我的模型类,我使用@JsonSerializable。

我正在努力解决的是用于模型中图像的数据类型。从 API 我得到一个 base64 编码的字符串,image_picker 插件给了我一个文件。

在我的模型中实现这一点的最佳方法是什么?我可以想象使用一个字符串(base64 编码),因为这是我从 API 中得到的。从我从 image_picker 获得的文件中获取 base64 表示也不难。

如果我在实现我的一些想法时遇到了问题,还可以为解决方案提供 fromJson 和 toJson 函数。

【问题讨论】:

    标签: json image flutter dart model


    【解决方案1】:

    您可以通过执行以下操作来序列化/反序列化模型对象。

    class Doughnut {
     final String name;
     final String filling;
     final String topping;
     final double price;
    
     Doughnut(this.name, this.filling, this.topping, this.price);
    
     Doughnut.fromJson(Map<String, dynamic> json)
         : name = json['name'],
           filling = json['filling'],
           topping = json['topping'],
           price = json['price'];
    
     Map<String, dynamic> toJson() => {
       'name' : name,
       'filling' : filling,
       'topping' : topping,
       'price' : price
     };
    }
    

    你可以参考这个source来序列化和反序列化你的模型对象。

    就图像序列化而言,您应该使用 base64 字符串方法。以这种方式将图像与其他数据一起序列化会很容易。

    编辑: 如果 base64 字符串中的序列化不是首选,那么您可以做的是将图像存储到设备存储中,并在序列化时仅存储图像的路径,但在此您必须执行两个过程:

    1. 获取应用的存储权限
    2. 反序列化时检查文件,您需要根据自己的要求处理生成的场景。

    希望对你有帮助。

    【讨论】:

    • 谢谢,这也是我目前的看法。但我有两个担忧:在我的模型中保留 base64 数据有点浪费内存,因为我同时需要 GUI 的位图表示,而且 base64 可能不是存储图像的最有效方式。对于很多图像,这可能会成为一个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-10-30
    • 2021-02-26
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多