Flutter 二次封装Sqlite基类

  • 发表于
  • flutter

安装 Sqlite 插件

首先我们需要安装 Sqlite 插件

创建基类,用来实例化数据库

基类已经做好了初始化数据库的准备, 当子类继承基类时会触发初始化数据库事件, 初始化数据库完成后基类还需要做哪些事情?

  1. 建表, 触发子类建表事件, 但是表如果已经存在了, 重复创建会报错, 所以这个函数只能触发一次;
  2. 数据库升级或降级,触发子类的升级或降级事件, 并且也只能触发一次;

添加建表功能

如何触发子类建表事件, 并且只触发一次? 我们可以在基类中定义创建表的函数,并且该函数在子类中必须重写, 判断该表是否存在,如果不存在则创建

数据库升级或降级

在基类中我们实现了建表的功能, 同理数据库升级或降级也可以这样写

简易版增删改查

好了现在我们有了建表的功能, 但是我们还需要对表进行增删改查, 所以接下来我们封装一个简易的增删改查功能

开始实验

新建一个user_info实体类, 继承EntityPlus

页面中操作user_info表

此时我们需要考虑一些问题:

  1. 打开数据库属于异步操作, 直接实例化时, 数据库并没有初始化完成, 此时操作数据库肯定会发生异常;
  2. 每次操作数据库都要实例化一次是不是太浪费内存了;

基于以上问题, 我们可以将 UserInfoEntity 改成单例模式

然后再新建一个类,用来存放所有实体类, 将所有实体类先进行实例化

由于第一次安装应用, 设备并不存在我们需要的数据表, 所以还需要等待数据表的创建完成, 防止进入页面时直接对表进行操作时发生异常

在main函数中执行 MySqlite.forFeature, 等数据库初始化完成, 并且所有的表都已经创建完成, 再执行下面的代码

需要注意一个问题, 等待数据库和表的初始化完成是需要时间的, 这种方式会阻塞页面, 如果表很多的话白屏时间会加长, 可以将这个方法放在启动页中, 等初始化完毕后再进入主页面, 因为我的程序数据表并不多, 所以我就直接写在mian函数中了;

此时再页面中可以直接对数据库进行增删改查的操作了

基类的完整代码

作者:向往全栈的Web小白