IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter数据持久化 -> 正文阅读

[移动开发]Flutter数据持久化

前言

欢迎阅读Flutter系列教程,本文讲解Flutter的数据持久化。主要分三块内容:
1.使用Sqlite
2.读写文件
3.存储键值对

Sqlite的使用

如果你的APP需要经常在本地存储查询大量数据,就选择数据库。通常使用数据库来进行数据的增删改查比其他数据持久化方案速度更快。Flutter里面可以通过sqflite插件来操作Sqlite

sqlite简介

如果你用过数据库,可以略过此部分,使用时留意一下代码语法就行。

实战

  1. 首先要添加依赖,在pubspec.yaml文件里添加,添加完以后下载一下。
dependencies:
  flutter:
    sdk: flutter
  sqflite:
  path:
  1. 引入库
import 'dart:async';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
  1. 创建数据库模型
    在创建数据库之前,先花几分钟对数据库要存储的信息建立一个对象。
class Device{
  final String mac;
  final String name;
  final int ownerId;

  Device({
    required this.mac,
    required this.name,
    required this.ownerId,
  });
  Map<String, dynamic> toMap() {
  return {
    'mac': mac,
    'name': name,
    'ownerId': ownerId,
  };
}
}
  1. 写一下建表语句
    如下,当调用openDatabase就新建了一个数据库链接。

当调用openDatabase时,如果数据库不存在的话就会执行onCreate回调函数,所以我们可以把建表语句放在onCreate函数里。

  final database = openDatabase(
    join(await getDatabasesPath(), 'fridge_database.db'),
    onCreate: (db, version) {
      return db.execute(
        'CREATE TABLE devices(mac TEXT PRIMARY KEY, name TEXT, ownerId INTEGER)',
      );
    },
    version: 1,
  );
  1. 插入
  Future<void> insertDevice(Device device) async {
    final db = await database;
    await db.insert(
      'devices',
      device.toMap(),
      conflictAlgorithm: ConflictAlgorithm.replace, //指定一种策略,当有相同的设备时,直接替换掉。
    );
  }
  1. 查询
  Future<List<Device>> devices() async {
    final db = await database;
    final List<Map<String, dynamic>> maps = await db.query('devices');//查询devices表,此时返回的时List类型,元素为Map类型
    return List.generate(maps.length, (i) { //转换成Device类型
      return Device(
        mac: maps[i]['mac'],
        name: maps[i]['name'],
        ownerId: maps[i]['ownerId'],
      );
    });
  }

  1. 如下代码,根据mac修改设备信息
  Future<void> updateDevice(Device device) async {
    final db = await database;
    await db.update(
      'dogs',
      device.toMap(),
      where: 'mac = ?',
      whereArgs: [device.mac],
    );
  }

  1. 根据mac删除设备信息
  Future<void> deleteDevice(String mac) async {
    final db = await database;
    await db.delete(
      'devices',
      where: 'mac = ?',
      whereArgs: [mac],
    );
  }

文件读写

添加依赖:

 path_provider:

文件系统分为应用目录和临时目录,在安卓里分别对应AppDatagetCacheDir(),ios对应NSDocumentDirectoryNSCachesDirectory

临时目录随时可能被系统删除,应用目录只有在系统写在app时才会删除。

下面的代码获取app目录

Future<String> get _localPath async {
  final directory = await getApplicationDocumentsDirectory();
  return directory.path;
}

然后根据app可以拼接成完整的文件目录,根据目录返回File对象

Future<File> get _localFile async {
  final path = await _localPath;
  return File('$path/counter.txt');
}

此时就可以使用这个File对象进行文件读写了

Future<File> writeCounter(int counter) async {

  final file = await _localFile;
  
  return file.writeAsString('$counter');
}

Future<int> readCounter() async {
  try {
    final file = await _localFile;
    
    final contents = await file.readAsString();
    
    return int.parse(contents);
    
  } catch (e) {
    return 0;
  }
}

此处读写的文件需要root才能查看哦!

键值对

依然添加依赖

 shared_preferences:

对应安卓里面的SharedPreferencesiso的NSUserDefaults ,用来存储少量的键值对。

写:

final prefs = await SharedPreferences.getInstance(); //获取引用
prefs.setInt('counter', counter);//写值
final counter = prefs.getInt('counter') ?? 0;//读值
prefs.remove('counter');//删除

注意:

  • 仅支持int, double, bool, string, and stringList.
  • 不要存大量数据
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:09:04  更:2021-12-03 13:11:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:58:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码