首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将我的类编码为json,以便将http put发送到firebase?

如何将我的类编码为json,以便将http put发送到firebase?
EN

Stack Overflow用户
提问于 2019-01-14 23:59:59
回答 1查看 509关注 0票数 3

我试图对我的类进行编码,以便将一个put http发送到firebase,但是当我打印User.toMap时,我的函数显示了一个带有"Instance of 'Address'“的列表。

代码语言:javascript
复制
{id: -LVsaRJKo3vo6q9NWZn_, name: User 38197, email: null, address: [Instance of 'Address']}
代码语言:javascript
复制
class User {
  String id;
  String name;
  String email;
  List<Address> address = new List<Address>();

  User({this.id, this.name, this.email, this.address});

  User.fromMap(Map<String, dynamic> map) {
    this.id = map['id'];
    this.name = map['name'];
    this.email = map['email'];

    if (map['address'] == null) {
      this.address = new List<Address>();
    } else {
      this.address= (map['address'] as List).map((i) => Address.fromMap(i)).toList();
    }
  }

  Map<String, dynamic> toMap() {
    return {'id': id, 'name': name, 'email': email, 'address': address};
  }
}

===

代码语言:javascript
复制
class Address {
  String test;

  Address ({this.test});

  Address.fromMap(Map<String, dynamic> map) {
    this.test = map['test'];
  }

  Map<String, dynamic> toMap() {
    return {
      'test': test
  }
}

===

在类ApiProvider中

代码语言:javascript
复制
Future<User> updateUser(User userUpdate) async {
    String id = userUpdate.id;

    print(userUpdate.toMap()); // This prints that line

    final http.Response response = await http.put(
      baseUrl + '/user/$id.json',
      body: json.encode(userUpdate.toMap()), // Here happens the error
    );

    final Map<String, dynamic> userData = json.decode(response.body);
    User user = new User.fromMap(userData);   

    return user;
  }

===

最后一个错误:

代码语言:javascript
复制
I/flutter (17495): {id: -LVsaRJKo3vo6q9NWZn_, name: User 38197, email: null, address: [Instance of 'Address']}
E/flutter (17495): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error:     Unhandled exception:
E/flutter (17495): Converting object to an encodable object failed: Instance of 'Address'
E/flutter (17495): #0      _JsonStringifier.writeObject (dart:convert/json.dart:703:7)
E/flutter (17495): #1      _JsonStringifier.writeList (dart:convert/json.dart:753:7)
E/flutter (17495): #2      _JsonStringifier.writeJsonValue (dart:convert/json.dart:735:7)
E/flutter (17495): #3      _JsonStringifier.writeObject (dart:convert/json.dart:693:9)
E/flutter (17495): #4      _JsonStringifier.writeMap (dart:convert/json.dart:786:7)
E/flutter (17495): #5      _JsonStringifier.writeJsonValue (dart:convert/json.dart:741:21)
E/flutter (17495): #6      _JsonStringifier.writeObject (dart:convert/json.dart:693:9)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 00:22:15

代码语言:javascript
复制
  Map<String, dynamic> toMap() {
    return {'id': id, 'name': name, 'email': email, 'address': address};
  }

需要更改为

代码语言:javascript
复制
  Map<String, dynamic> toMap() {
    return {'id': id, 'name': name, 'email': email, 'address': address.map((a) => a.toMap()).toList()};
  }
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54184952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档