在Flutter中编辑字符串变量

时间:2018-09-12 11:05:15

标签: variables dart flutter

如何编辑messagePrefs变量的值。 在我的代码中:

Future<List<ChatTile>> fetchChat(socketutil,id) async {
  Completer completer = new Completer();
  String messagePrefs = '[]';
  socketutil.join(id)
  .then((result) async {
    print("DUA");
    SharedPreferences prefs = await SharedPreferences.getInstance();
    messagePrefs = (prefs.getString('messagePrefs') ?? "[]");
    print(messagePrefs); value is '[{"createdAt":"2018-09-07T15:24:26.280Z","is_read":1,"_id":"5b92982a5d31755e82288456","from_id":"5b751f8a052e8b0a19f1c684","from_name":"RITA .L. Bubun","from_photo":"https:\/\/lh3.googleusercontent.com\/-Nocv8SNhvn0\/AAAAAAAAAAI\/AAAAAAAAALk\/nwOSRVOuPKg\/photo.jpg","from_device":"Mobile Phone","text":"Assalamualaikum, mohon kiranya kami dapat diinformasikan terkait dokumen akreditasi prodi, apabila kami telah mengirim dokumen dengan mengisi SAPTO online, dan kemudian masih ad perbaikan dan perbaikan tersebut dikirim pada bulan Oktober, apakah prodi tersebut akan terkena aturan pemberlakuan 9 standar atau tetap menggunakan 7 standar sesuai pengajuan sebelum Oktober"}]'
    completer.complete(result);
  })
  .catchError((e) {
    print(e);
  });
  print(messagePrefs); //value is '[]'
  return await compute(parseListChat, messagePrefs);
}

我该怎么做才能更改messagePrefs变量的值?

谢谢,最好的问候。

1 个答案:

答案 0 :(得分:0)

您正在更改该值,但这会在执行print语句之后发生。

尝试在await之前添加socketUtil.join(id).then( ... ),以等待该操作完成,然后再继续执行打印语句。

更好的是,始终使用await而不是与then调用混合使用:

Future<List<ChatTile>> fetchChat(socketutil,id) async {
  String messagePrefs = '[]';
  try {
    var result = await sockeutil.join(id);
    print("DUA");
    SharedPreferences prefs = await SharedPreferences.getInstance();
    messagePrefs = (prefs.getString('messagePrefs') ?? "[]");
    print(messagePrefs);
  } catch (e) {
    print(e);
  }
  print(messagePrefs);
  return await compute(parseListChat, messagePrefs);
}

(我没有看到completer的任何使用,所以也删除了它。)