SharedPreferences декодируется Json в список - PullRequest
0 голосов
/ 28 апреля 2020

Мое приложение извлекает информацию из Google Sheet при наличии подключения и сохраняет ее в переменных и обновляет настройки для использования при отсутствии подключения

List<List<String>> popList = new List<List<String>>();
List<List<String>> allList = new List<List<String>>();

Из листов в списки

final popular = await _popularSheet.values.allRows(fromRow: 2);
final all = await _allSheet.values.allRows(fromRow: 2);
popular.forEach((f)=>popList.add(f));
all.forEach((f)=>allList.add(f));

И обновите SharedPreferences

updateSharedPrefs() async{
   SharedPreferences prefs = await SharedPreferences.getInstance();
   await prefs.setString('popular', json.encode(popList));
   await prefs.setString('all', json.encode(allList));
}

Я пробовал это, но я не могу понять, как правильно преобразовать JSON из SharedPreferences в List<List<String>> для использования в автономном режиме

SharedPreferences prefs = await SharedPreferences.getInstance();
popularJson = json.decode(await prefs.getString('popular'));
allJson = json.decode(await prefs.getString('all'));
print('no internet');

for(var i in popularJson){
  popList.add(i);
}
for(var i in allJson){
  allList.add(i);
}

I ' m получаю этот вывод

I/flutter (18739): no internet
E/flutter (18739): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'List<String>'
E/flutter (18739): #0      main (package:my_app/main.dart:61:19)
E/flutter (18739): <asynchronous suspension>
E/flutter (18739): #1      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:239:25)
E/flutter (18739): #2      _rootRun (dart:async/zone.dart:1126:13)
E/flutter (18739): #3      _CustomZone.run (dart:async/zone.dart:1023:19)
E/flutter (18739): #4      _runZoned (dart:async/zone.dart:1518:10)
E/flutter (18739): #5      runZoned (dart:async/zone.dart:1502:12)
E/flutter (18739): #6      _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:231:5)
E/flutter (18739): #7      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:307:19)
E/flutter (18739): #8      _RawReceivePortImpl._handleMessage (dart:isolate-    patch/isolate_patch.dart:174:12)

Как мне преобразовать JSON Список в список>?

Решено : Это то, что сработало для меня

popList = (popularJson as List).map((el)=>List<String>.from(el)).toList();
allList = (allJson as List).map((el)=>List<String>.from(el)).toList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...