【问题标题】:Shared Preferences String List returning null共享首选项字符串列表返回 null
【发布时间】:2021-06-24 23:30:17
【问题描述】:

每当我向列表中添加新项目时,我都有保存列表的功能:

void saveList() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setStringList('list', global.contactList);
  }

并使用 :

将其加载到 main.dart
void main() async {

  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  loadData();
  runApp(MyApp());

  }
loadData()async{
  SharedPreferences prefs = await SharedPreferences.getInstance();
  global.number = await prefs.getString('number');
  global.contact = await prefs.getString('contact');
  global.contactList = await prefs.getStringList('list');
}

但在加载列表时我得到了 null,尽管我有一个包含数据的有效列表并且在保存时没有错误

【问题讨论】:

  • 如何判断为空?您正在调用 loadData 而不等待它,所以这可能是一个问题。
  • 我添加了等待,这不是问题。@puelo

标签: flutter dart


【解决方案1】:

获取数据后是否更新了ui? 首先,您的列表将等于 null,然后它将从 SharedPreference 获取数据。

使用 FutureBuilder 小部件显示来自 SharedPrefernce 的数据

Future getList()async{
  SharedPreferences prefs = await SharedPreferences.getInstance();
 
  global.contactList = await prefs.getStringList('list');
return global.contactList;
}

return FutureBuilder(
    future: getList()// here future function which return data from sharedPreference,
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        return YourFinalWidget();
      }
else if (snapshot.hasError) {         
                return Center(child:Text("${snapshot.error}"));
              }
      return CircularProgressIndicator(); // or some other widget
    },
  );

【讨论】:

  • 循环进度条不停地旋转@islam akhrarov
  • 重试编辑过的代码,在你的用户界面中你会看到错误
  • 不,我没有收到任何错误。似乎数据根本没有加载@islam akhrarov
【解决方案2】:

我终于让它工作了,解决方案是使用jsonEncodejsonDecode 来保存一个字符串而不是一个列表,像这样:

  void saveList() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
     await prefs.setString('list', jsonEncode(global.contactList));
  }

并加载:

Future getList()async{
  SharedPreferences prefs = await SharedPreferences.getInstance();
  global.contactList = await jsonDecode(prefs.getString('list'));
  return global.contactList;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-17
    • 2012-08-22
    • 2020-12-28
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多