使用provider将List<object>存储在sharedpreferences中的步骤如下:
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class DataProvider extends ChangeNotifier {
List<Object> dataList = [];
Future<void> saveData(List<Object> newDataList) async {
dataList = newDataList;
final prefs = await SharedPreferences.getInstance();
await prefs.setStringList('dataList', dataList.map((e) => e.toString()).toList());
notifyListeners();
}
Future<void> loadData() async {
final prefs = await SharedPreferences.getInstance();
final savedDataList = prefs.getStringList('dataList');
dataList = savedDataList?.map((e) => Object.fromString(e)).toList() ?? [];
notifyListeners();
}
}
在上述代码中,我们将List<Object>对象存储在shared_preferences中的'dataList
'键下。通过saveData方法可以将新的List<Object>保存到shared_preferences中,而loadData方法可以从shared_preferences中加载之前保存的List<Object>对象。
main.dart
文件中的runApp
方法中添加ChangeNotifierProvider
:void main() {
runApp(
ChangeNotifierProvider<DataProvider>(
create: (_) => DataProvider(),
child: MyApp(),
),
);
}
Consumer
来监听Provider的状态变化,并调用相应的读写方法。例如:import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class MyPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final dataProvider = Provider.of<DataProvider>(context);
return Scaffold(
body: Center(
child: Column(
children: [
ElevatedButton(
child: Text('Save Data'),
onPressed: () {
List<Object> newDataList = ...; // 准备新的数据列表
dataProvider.saveData(newDataList);
},
),
ElevatedButton(
child: Text('Load Data'),
onPressed: () {
dataProvider.loadData();
},
),
Consumer<DataProvider>(
builder: (context, dataProvider, _) {
return ListView.builder(
itemCount: dataProvider.dataList.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(dataProvider.dataList[index].toString()),
);
},
);
},
),
],
),
),
);
}
}
在上述代码中,我们使用Provider.of<DataProvider>(context)
获取到之前定义的DataProvider对象。在按钮的点击事件中,调用相应的方法进行数据的保存和加载。使用Consumer
组件来监听dataProvider的状态变化,并根据新的数据列表进行UI的更新。
通过上述步骤,你就可以使用provider将List<Object>对象存储在shared_preferences中了。记得在适当的地方捕获异常并进行错误处理。
领取专属 10元无门槛券
手把手带您无忧上云