Редактировать строковую переменную во флаттере - PullRequest
0 голосов
/ 12 сентября 2018

как редактировать значение переменной 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 голосов
/ 12 сентября 2018

Вы меняете значение, но это происходит после выполнения оператора 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, поэтому тоже удалил его).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...