shared_preferences
在 Flutter 中,我们可以使用 shared_preferences 来实现轻量级的数据存储。需要注意:shared_preferences在Android设备上是基于SharedPreferences开发的,而运行在iOS设备上是基于NSUserDefaults开发的。
导入 shared_preferences 库
首先,我们先添加依赖:
yaml
dependencies:
shared_preferences: ^2.5.3
然后在代码中引入对应的包,代码如下所示:
arduino
import 'package:shared_preferences/shared_preferences.dart';
shared_preferences 的使用
- 保存操作
vbscript
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.setString("username", username);
sharedPreferences.setString("password", password);
- 读取操作
ini
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.get(keyString);
- 删除操作
ini
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.remove(keyString);
- 清空操作
ini
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.clear();
文件存储
在 Flutter 中,如果我们想要操作App目录或者SD文件夹中的文件,则需要使用 path_provider 库。我们都知道在Android和iOS下,临时目录、文档目录都是不同的。而 path_provider 库提供了统一的接口,能够获取手机上的常用目录,如临时目录、文档目录等,从而方便程序存储和访问指定目录下的文件。
导入 path_provider 库
首先我们先添加依赖
yaml
dependencies:
path_provider: ^2.1.5
然后在代码文件中 import 对应的包
arduino
import 'package:path_provider/path_provider.dart';
path_provider 的使用
- 获取临时文件目录
ini
_getTempFileDir() async{
Directory tempDir=await getTemporaryDirectory();
String tempPath=tempDir.path;
}
- 获取SD卡外部存储目录
ini
_getSDFileDir() async{
Directory sdFileDir=await getExternalStorageDirectory();
String sdFileDirPath=sdFileDir.path;
}
注意:在iOS中,没有外部存储目录的概念,也就是没有SD卡外部存储目录。所以在实际的开发中,读者需要先判断系统,再做出适当的更改。
sqflite
SQLite是一款轻量级的数据库,是手机最常用的一种数据存储方式。在Flutter项目中,如果需要对数据进行大批量的增删改查的操作,就会用到SQLite数据库。Flutter专门提供了操作SQLite数据库的sqflite库。
导入 sqflite 库
首先我们添加依赖:
yaml
dependencies:
sqflite: ^2.4.2
然后在代码文件中 import 对应的包
arduino
import 'package:sqflite/sqflite.dart';
sqflite 的使用
- 获取数据库的路径
ini
_getDatabasePath() async{
var databasePath=await getDatabasesPath();
String path=join(databasePath,'demo.db');
print(path);
}
- 打开SQLite数据库并创建表
ini
_openDatabaseAndCreateTable()async{
var databasePath=await getDatabasesPath();
String path=join(databasePath,'demo.db');
Database database=await openDatabase(
path,
version: 1,
onCreate: (Database db,int version)async{
await db.execute(
'CREATE TABLE User(id INTEGER PRIMARY KEY,name TEXT,age INTEGER)',
);
}
);
}
- 数据库插入操作
ini
// 使用 rawInsert 插入
_rawInsertData() async{
var databasesPath=await getDatabasesPath();
String path=join(databasesPath,'demo.db');
Database database=await openDatabase(path,version:1,);
database.transaction((txn) async{
int id1 = await txn.rawInsert(
'INSERT INTO User(name, age) VALUES(?, ?)',['Liyuanjing',27]);
print('inserted1: $id1');
});
}
// 使用 insert 插入
_insertData() async{
var databasesPath=await getDatabasesPath();
String path=join(databasesPath,'demo.db');
Database database=await openDatabase(path,version:1,);
Map<String,dynamic> values={
'name':'zhangsan',
'age': 24,
};
await database.insert('User', values);
}
- 数据库更新操作
和上面的查找操作类似,更新操作也有两种方法:rawUpdate 和 update。代码示例如下:
dart
_rawUpdateData() async{
var databasesPath=await getDatabasesPath();
String path=join(databasesPath,'demo.db');
Database database=await openDatabase(path,version:1,);
database.transaction((txn) async{
int id1 = await txn.rawUpdate(
'UPDATE User SET name=? WHERE age=?',["Batman",27]);
print('inserted1: $id1');
});
}
_updateData() async{
var databasesPath=await getDatabasesPath();
String path=join(databasesPath,'demo.db');
Database database=await openDatabase(path,version:1,);
database.transaction((txn) async{
Map<String,dynamic> values={
'name':'SpiderMan',
};
int id1 = await txn.update('User',values,where: 'age=?',whereArgs: [27,]);
print('inserted1: $id1');
});
}
- 数据库查询操作
dart
_rawQueryData() async{
var databasesPath=await getDatabasesPath();
String path=join(databasesPath,'demo.db');
Database database=await openDatabase(path,version:1,);
database.transaction((txn) async{
List<Map<String,dynamic>> list = await txn.rawQuery(
'SELECT * FROM User WHERE age=?',[27]);
print(list);
});
}
_queryData() async{
var databasesPath=await getDatabasesPath();
String path=join(databasesPath,'demo.db');
Database database=await openDatabase(path,version:1,);
database.transaction((txn) async{
List<Map<String,dynamic>> list = await txn.query('User',where: 'age=?',whereArgs:
[27,]);
print(list);
});
}
- 数据删除操作
ini
_rawDeleteData()async{
var databasesPath=await getDatabasesPath();
String path=join(databasesPath,'demo.db');
Database database=await openDatabase(path,version:1,);
database.transaction((txn) async{
int id = await txn.rawDelete('DELETE FROM User WHERE age = ?', [24,]);
print("$id");
});
}
_deleteData()async{
var databasesPath=await getDatabasesPath();
String path=join(databasesPath,'demo.db');
Database database=await openDatabase(path,version:1,);
database.transaction((txn) async{
int id = await txn.delete('User',where: 'age=?',whereArgs: [27,]);
print("$id");
});
}
- 其他
scss
// 删除数据库
_deleteDatabase() async{
var databasePath=await getDatabasesPath();
String path=join(databasePath,'demo.db');
await deleteDatabase(path);
}
// 关闭数据库
_closeDatabase() async{
await database.close();
}