如何编辑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
变量的值?
谢谢,最好的问候。
答案 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
的任何使用,所以也删除了它。)