# 获取文件路径
flutter pub add path_provider
# 权限申请
flutter pub add permission_handler
# 文件选择
flutter pub add file_picker
管理存储设备上的所有文件 | Android 开发者 | Android Developers
AndroidManifest.xml
中声明权限 在Android11及以上版本仅能操作媒体文件和图片
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:requestLegacyExternalStorage="true">
若需要获取所有文件管理权限
<!-- 以下配置在 Android 11 之后需要声明,以便管理所有文件-->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
await Permission.storage.request();
// 高版本获取所有文件管理权限
await Permission.manageExternalStorage.request();
用 SQLite 做数据持久化 | Flutter 中文文档 | Flutter 中文开发者网站
sqflite
提供了丰富的类和方法,以便你能便捷实用 SQLite 数据库。
path
提供了大量方法,以便你能正确的定义数据库在磁盘上的存储位置。
dependencies:
flutter:
sdk: flutter
sqflite:
path:
openDatabase(
join(await getDatabasesPath(), "book.db"),
onCreate: (db, version) {
return db.execute(
'CREATE TABLE books(id TEXT PRIMARY KEY, name TEXT, extension TEXT, bookUrl TEXT)',
);
},
onUpgrade: (db, oldVersion, newVersion) {},
onDowngrade: (db, oldVersion, newVersion) {
},
version: 1,
);
/// tableName, 数据为kv结构
db.insert(_bookTable, book.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace));
db.update(
_bookTable,
book.toMap(),
where: 'id = ?',
whereArgs: [book.id],
);
db.query(_bookTable);
db.delete(
_bookTable,
book.toMap(),
where: 'id = ?',
whereArgs: [book.id],
);
Future<void> batchInsert(Database db, List<T> list) async {
MyLog.d("Table", "${getTableName()} batchInsert: ${list.length}");
Batch batch = db.batch();
// 批量插入
// 也可以增加更新、删除等其他操作。
for (var element in list) {
batch.insert(getTableName(), toMap(element),
conflictAlgorithm: ConflictAlgorithm.replace);
}
List<Object?> result = await batch.commit();
for(var res in result) {
MyLog.d("Table", "${getTableName()} result: ${res}");
}
}
db.execute("ALTER TABLE books ADD md5 TEXT");
存储键值对数据 | Flutter 中文文档 | Flutter 中文开发者网站
只能用于基本数据类型: int、double、bool、string 和 stringList。
不适用于大量数据的存储。
flutter pub add shared_preferences
// obtain shared preferences
final prefs = await SharedPreferences.getInstance();
// set value
prefs.setInt('counter', counter);
final prefs = await SharedPreferences.getInstance();
// Try reading data from the counter key. If it doesn't exist, return 0.
final counter = prefs.getInt('counter') ?? 0;
final prefs = await SharedPreferences.getInstance();
prefs.remove('counter');