Flutter映射到自定义对象列表

时间:2020-05-22 19:41:15

标签: flutter dart

我正在从网络套接字取回信息,该信息可能在每个响应中包含一个或多个项目。

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

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

我也想添加到列表中,但是如果对象中的“名称”字段已经存在,则只需更新该对象的金额值,而不添加其他副本即可。除非有更短的方法,否则我将循环执行此操作。

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

编辑:

  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%确定吗?

以下是从网络套接字收到的消息的两个示例:

示例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)));
    });
}

1 个答案:

答案 0 :(得分:0)

  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('=========');
  }