共享首选项字符串列表返回 null

时间:2021-03-28 20:01:25

标签: flutter dart

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

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');
}

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

2 个答案:

答案 0 :(得分:0)

你拿到数据后更新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
    },
  );

答案 1 :(得分:0)

我终于让它工作了,解决方案是使用 fetchGroups()jsonEncode 来保存字符串而不是像这样的列表:

jsonDecode

并加载:

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

相关问题