每当我向列表添加新项目时,我都有这个功能来保存列表:
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');
}
但是我在加载列表时得到空值,尽管我有一个包含数据的有效列表并且保存时没有错误
答案 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));
}