Flutter如何实现本地存储

如何在Flutter应用中实现本地数据存储?有哪些常用的插件或方法可以选择?比如shared_preferences、sqflite或hive,它们各自有什么优缺点?希望能提供简单的示例代码说明基本用法,以及在不同场景下如何选择最合适的存储方案。

2 回复

Flutter本地存储常用方式:

  1. SharedPreferences:存储简单键值对
  2. sqflite:SQLite数据库,适合结构化数据
  3. 文件存储:使用path_provider访问目录,dart:io读写文件
  4. hive:轻量级键值数据库,性能较好

根据数据结构和需求选择合适方案。

更多关于Flutter如何实现本地存储的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,实现本地存储有多种方式,以下是常用的几种方法:

1. Shared Preferences

适合存储简单的键值对数据(如用户设置、登录状态等)

import 'package:shared_preferences/shared_preferences.dart';

// 存储数据
Future<void> saveData() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString('username', 'John');
  await prefs.setInt('age', 25);
  await prefs.setBool('isLoggedIn', true);
}

// 读取数据
Future<void> readData() async {
  final prefs = await SharedPreferences.getInstance();
  String? username = prefs.getString('username');
  int? age = prefs.getInt('age');
  bool? isLoggedIn = prefs.getBool('isLoggedIn');
}

2. SQLite数据库

适合存储结构化数据

import 'package:sqflite/sqflite.dart';

class DatabaseHelper {
  static final DatabaseHelper _instance = DatabaseHelper._internal();
  factory DatabaseHelper() => _instance;
  
  static Database? _database;
  
  Future<Database> get database async {
    _database ??= await _initDatabase();
    return _database!;
  }
  
  Future<Database> _initDatabase() async {
    return openDatabase(
      join(await getDatabasesPath(), 'my_database.db'),
      onCreate: (db, version) {
        return db.execute(
          'CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, email TEXT)',
        );
      },
      version: 1,
    );
  }
}

3. 文件存储

适合存储大文件或自定义格式数据

import 'dart:io';
import 'package:path_provider/path_provider.dart';

// 写入文件
Future<File> writeToFile(String text) async {
  final directory = await getApplicationDocumentsDirectory();
  final file = File('${directory.path}/my_file.txt');
  return file.writeAsString(text);
}

// 读取文件
Future<String> readFromFile() async {
  try {
    final directory = await getApplicationDocumentsDirectory();
    final file = File('${directory.path}/my_file.txt');
    return await file.readAsString();
  } catch (e) {
    return '';
  }
}

4. Hive(推荐)

轻量级、高性能的键值数据库

import 'package:hive/hive.dart';

// 初始化
await Hive.initFlutter();
var box = await Hive.openBox('myBox');

// 使用
box.put('name', 'David');
String name = box.get('name');

选择建议:

  • 简单配置:Shared Preferences
  • 结构化数据:SQLite 或 Hive
  • 大文件:文件存储
  • 高性能需求:Hive

记得在 pubspec.yaml 中添加相应的依赖包。

回到顶部