app - flutter重启后如何保存app数据?



我想知道如何使我的应用程序重新启动后保存数据?(用户可以删除任务和添加新任务到列表中,也可以勾选任务已完成的复选框。我希望应用程序保存这些数据,以便当用户存在时,应用程序将显示他离开应用程序的所有任务)

我在谷歌上读了几个小时,我必须[1]: https://flutter.dev/docs/cookbook/persistence/reading-writing-files这个链接作为一个推荐类似的职位。但是读完它之后,我对从哪里开始我的应用程序有点困惑。

包括我的一些代码,如果你能帮助我,我真的很感激,因为经过几个小时的阅读和观看教程,我仍然很不确定从哪里开始,或者哪种方式做这是最好的。

我的主。

void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) =>
TaskData(), //changing builder: to create: fixed the errors i been having
child: MaterialApp(
home: TasksScreen(),
),
);
}
}
class TaskData extends ChangeNotifier {
List<Task> _tasks = [
Task(name: "Sample task 1"),
Task(name: "Sample task 2"),
Task(name: "Sample task 3"),
];

UnmodifiableListView<Task> get tasks {
return UnmodifiableListView(_tasks);
}

int get taskCount {
return _tasks.length;
}
void addTask(String newTaskTitle) {
final task = Task(name: newTaskTitle);
_tasks.add(task);
notifyListeners();
}
void updateTask(Task task) {
task.toggleDone();
notifyListeners();
}
void deleteTask(Task task) {
_tasks.remove(task);
notifyListeners();
}

非常感谢!

基本方法是使用设备本地存储

1 -在您的pubspec.yaml中添加shared_preferences2 -创建一个类来读写数据:

import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class StoreData {
StoreData._privateConstructor();

static final StoreData instance = StoreData._privateConstructor();
Future<void> saveString(String key, String value) async {

try{
SharedPreferences pref = await SharedPreferences.getInstance();
final encodedValue = base64.encode(utf8.encode(value));
pref.setString(key, encodedValue);
} catch (e){
print('saveString ${e.toString()}');
}

}

Future<String> getString(String key) async {

SharedPreferences pref = await SharedPreferences.getInstance();
final value = pref.getString(key) == null ? '' : pref.getString(key);
if (value.length > 0) {
final decodedValue = utf8.decode(base64.decode(value));  
return decodedValue.toString();
}

return '';
}

Future<bool> remove(String key) async {
SharedPreferences pref = await SharedPreferences.getInstance();
return pref.remove(key);
}
}

3使用:

保存数据:

StoreData.instance.saveString('name', 'sergio');

检索数据:

final String storedName = await StoreData.instance.getString('name');
print('The name is $storedName');

我们有很多其他的方法,如使用SQlite, NoSql或数据库后端,但本地存储是最基本的情况

您需要的是一个数据库或基于文档的数据存储。您可以使用sqflite插件在本地sqlite数据库中存储数据。或者你可以存储在JSON资产文件中。

您也可以使用服务器或云服务。Firebase和flutter集成得很好,但是AWS和Azure也很棒。

您可以将数据写入资产中的文本文件中,但这将非常复杂。

最新更新