首页 > 解决方案 > Flutter:如何将“模型实例”从 json_serializable 包含到 http post body?

问题描述

  var user = userModel(userName) as Map;
  print(user);
  // var _response =
  await http.post(
      Uri.parse('urllll'),
      headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
      },
      body: user);

我正在尝试包含userhttp-post-bodyusing 中json_serializable。但是,我收到Invalid argument(s): Invalid request body "Instance of 'userModel'".错误。

是否可以包含这样的内容,或者我必须解码Map才能发送它?如果是这种情况,那么包含的意义 Map<String, dynamic> toJson() => _$userModelToJson(this);何在?

标签: flutter

解决方案


首先在一个类中创建一个模型,并在模型中设置将类实例转换为的函数,Json反之亦然。

class MyModel {
  final int id;
  final String name;

  MyModel(this.id, this.name);

  factory MyModel.fromMap(Map<String, dynamic> json) {
    return MyModel(json['ID'], json['Name']);
  }

  Map<String, dynamic> toJson() => {
        'ID': id,
        'Name': name,
      };
}

然后然后使用toJson()定义的函数将实例转换为Json字符串

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<bool> postMethod(MyModel myModel) async {
    var jsonBody = jsonEncode(myModel.toJson());

    try {
      final response = await http.post(
        Uri.parse("your-url"),
        headers: <String, String>{
          'Content-type': 'application/json'
        },
        body: jsonBody,
      );
      if (response.statusCode == 200) {
        return true;
      } else {
        return false;
      }
    } catch (e) {
      return false;
    }
  }

推荐阅读