【问题标题】:How to return a dio output in Flutter如何在 Flutter 中返回 dio 输出
【发布时间】:2021-03-26 06:57:59
【问题描述】:

我想要做的是我试图捕捉 dio 输出。 现在我正在尝试创建一篇具有未来功能的文章。 这是我的代码:

颤动

Future<dynamic> futureArticle;
String articleid;

futureArticle = CreateArticle(user.id, caption.text)

Dio 发布功能

CreateArticleImage(String author,String caption,) async {
  try {

    FormData formData = new FormData.fromMap({
      'author' : author.toString(),
      'caption' : caption,
    });

    Response response = await Dio().post("$SERVER_IP/api/articlecreate/", data: formData);
    print(response.toString());
  } catch (e) {
    print(e);
  }
}

Json 输出

  {

        "id": "6ce0f013-d1fe-4f9f-bb72-0f1c8d21f64f",
        "caption": "Caption",
    },

我想要做的是我想捕获 id 并将其作为 articleid 返回到颤动。 有人知道怎么做吗?

【问题讨论】:

    标签: flutter dart dio


    【解决方案1】:

    在使用 API 时,建议根据我们期望接收的数据创建 Class

    class Article {
        String id;
        String caption;
    
        Article({
            this.id,
            this.caption,
        });
    
    }
    

    由于我们使用的是返回 JSON 对象的 API,我们可以实现 toJson 函数和 fromJson 工厂:

    class Article {
        String id;
        String caption;
    
        Article({
            this.id,
            this.caption,
        });
    
        factory Article.fromJson(Map<String, dynamic> json) => new Article(
            id: json["id"] == null ? null : json["id"],
            caption: json["caption"] == null ? null : json["caption"],
        );
    
        Map<String, dynamic> toJson() => {
            "id": id == null ? null : id,
            "caption": caption == null ? null : caption,
        };
    
    }
    

    通过这样做,我们可以从 HTTP 响应创建一个Article 类:

     FormData formData = new FormData.fromMap({
       'author' : author.toString(),
       'caption' : caption,
     });
     Response response = await Dio().post("$SERVER_IP/api/articlecreate/", data: formData);
     print(response.toString());
     final jsonData = json.decode(response.body);
     Article article = Article.fromJson(Map<String, String>.from(jsonData));
    

    以下 sn-p 根据您指定的场景包装了一个完整示例:

    import 'dart:convert';
    
    void getArticle(var user, var caption) async {
        Future<dynamic> futureArticle;
        String articleid;
    
        futureArticle = await createArticle(user.id, caption.text);
    
        print(futureArticle.id);
        print(futureArticle.caption);
    
        articleid = futureArticle.id;
    }
    
    Future<Article> createArticleImage(String author,String caption,) async {
      try {
        FormData formData = new FormData.fromMap({
          'author' : author.toString(),
          'caption' : caption,
        });
        Response response = await Dio().post("$SERVER_IP/api/articlecreate/", data: formData);
        print(response.toString());
        final jsonData = json.decode(response.body);
        Article article = Article.fromJson(Map<String, String>.from(jsonData));
        return article;
      } catch (e) {
        print(e);
      }
    }
    
    class Article {
        String id;
        String caption;
    
        Article({
            this.id,
            this.caption,
        });
    
        factory Article.fromJson(Map<String, dynamic> json) => new Article(
            id: json["id"] == null ? null : json["id"],
            caption: json["caption"] == null ? null : json["caption"],
        );
    
        Map<String, dynamic> toJson() => {
            "id": id == null ? null : id,
            "caption": caption == null ? null : caption,
        };
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 2021-09-29
      • 2021-01-24
      • 1970-01-01
      • 2021-06-29
      • 2011-10-12
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      相关资源
      最近更新 更多