在Flutter中编辑字符串变量

问题描述 投票:0回答:1

如何编辑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变量的值?

谢谢你,最好的关注。

variables dart flutter
1个回答
0
投票

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

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

更好的是,始终使用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所以我也删除它)。

© www.soinside.com 2019 - 2024. All rights reserved.