【问题标题】:Flutter Map to a list of custom objectsFlutter Map 到自定义对象列表
【发布时间】:2020-05-22 19:41:15
【问题描述】:

我正在从 websocket 获取信息,该信息可能在每个响应中包含一个或多个项目。

我想将这些响应转换为自定义对象列表。

我遇到的问题是我想在哪里使用返回数据的第一个索引(键)和第二个索引(值),并使用它们传递给自定义对象初始化以实例化它们并将它们添加到列表中。

我也想添加到列表中,但是如果对象中的“名称”字段已经存在,那么只需更新该对象的数量值,而不是添加另一个副本。除非有更短的方法,否则我将使用循环来执行此操作。

您可以在下面看到我尝试过的一些尝试。

编辑:

  var listAmounts = valueMap.values.toList();
  var listNames = valueMap.keys.toList();
  print(listAmounts[0]);
  print(listNames[0]);

for (int i = 0; i < listAmounts.length; i++) {
    Person newPerson =
        new Person(name: listNames[i], amount: double.parse(listAmounts[i]));
    coins.add(newPerson);
    print('=========');
    print(newPerson.name);
    print(newPerson.amount.toString());
    print('=========');
  }

我不确定这是不是一个好方法,因为键/值有可能不按顺序排列吗?通过测试,它们是,但我不是 100% 确定?

以下是从 websocket 接收到的消息的两个示例:

示例 1

{jacob: 123.456789, steven: 47.3476543}

示例 2

{henry: 54.3768574}

我有一个自定义类:

class Person {
  double amount;
  String name;

  Person({
    this.name = '',
    this.amount = 0.0,
  });
}

这里是主要代码:

 IOWebSocketChannel channel;
 List<Person> people = [];

 void openChannel() async {
 channel = IOWebSocketChannel.connect(
        "wss://ws.example.com/example?example=exp1,exp2,exp3");

    channel.stream.listen((message) {
      //print(message);
      Map valueMap = json.decode(message);
      print(valueMap);
      //people = List<Person>.from(valueMap.map((i) => Person.fromJson(i)));
      //message.forEach((name, amount) => people.add(Person(name: name, amount: amount)));
    });
}

【问题讨论】:

  • 你能更新上面的 Person 类并包含命名构造函数fromJson(Map&lt;String, dynamic&gt; json)吗?
  • 我尝试添加: fromJson(Map json) { this.name = json[0]; this.amount = amount.parse(json[1]); } 但得到:实例成员 fromJson 无法使用静态访问访问

标签: flutter dart


【解决方案1】:
  var listAmounts = valueMap.values.toList();
  var listNames = valueMap.keys.toList();
  print(listAmounts[0]);
  print(listNames[0]);

for (int i = 0; i < listAmounts.length; i++) {
    Person newPerson =
        new Person(name: listNames[i], amount: double.parse(listAmounts[i]));
    coins.add(newPerson);
    print('=========');
    print(newPerson.name);
    print(newPerson.amount.toString());
    print('=========');
  }

【讨论】:

  • 我能看到listAmounts & listNames的打印值吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2019-09-13
  • 2015-05-08
  • 2016-11-08
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多