首页 > 解决方案 > 在 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变量的值?

谢谢你,最好的尊重。

标签: variablesdartflutter

解决方案


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

尝试添加一个awaitbeforesocketUtil.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所以我也删除了它)。


推荐阅读