- 因为Flutter原生是没有数据库的,因此必须通过三方插件,在Flutter中常用的数据也就是sqflite,因此我们必须先引入sqflite: ^2.3.0
- 首先我们需要创建一个DB的Base类去操作对应的数据表
import 'package:finance/db/db_manager.dart';
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
///@changeRecord [修改记录]<br />
abstract class BaseDBProvider {
bool isTableExits = false;
tableSqlString();
tableName();
tableBaseString(String name, String columnId) {
return ''' create table $name($columnId integer primary key autoincrement ,''';
}
Future<Database> getDataBase() async {
return await open();
}
@mustCallSuper
prepare(name, String createSql) async {
isTableExits = await DBManager.isTableExits(name);
if (!isTableExits) {
Database db = await DBManager.getCurrentDataBase();
return await db.execute(createSql);
}
}
@mustCallSuper
open() async {
if (!isTableExits) {
await prepare(tableName(), tableSqlString());
}
return await DBManager.getCurrentDataBase();
}
}
- 创建一个数据库的实体类实现对应的toMap和toJson方法
const String columnTitle = "title";
const String columnText = "text";
class FinanceEntity {
late int id;
late String title;
late String text;
FinanceEntity({required this.title, required this.text});
static Map<String, dynamic> toMap(FinanceEntity todo) {
return {columnTitle: todo.title, columnText: todo.text};
}
factory FinanceEntity.fromJson(Map<String, dynamic> json) {
return FinanceEntity(
title: json["title"],
text: json["text"],
);
}
}
- 最后在对应的操作类实现操作方法
const String tableNames = "finance";
const String columnId = "_id";
class FinanceDao extends BaseDBProvider {
@override
tableName() {
return tableNames;
}
@override
tableSqlString() {
return tableBaseString(tableNames, columnId) + '''$columnTitle text,$columnText text )''';
}
///插入一条消息
Future insertTodo(FinanceEntity todo) async {
Database db = await getDataBase();
return await db.insert(tableNames, FinanceEntity.toMap(todo));
}
Future<FinanceEntity?> getFinanceById(String id) async {
Database db = await getDataBase();
List<Map<String, dynamic>> maps = await db.query(tableNames, where: " id = ?", whereArgs: [id]);
if (maps.isNotEmpty) {
return FinanceEntity.fromJson(maps.first);
}
return null;
}
Future<List<FinanceEntity>> getAllFinance() async {
List<FinanceEntity> list = [];
Database db = await getDataBase();
List<Map<String, dynamic>> maps = await db.query(tableNames, columns: [columnId,columnTitle, columnText]);
if (maps.isNotEmpty) {
for (var map in maps) {
list.add(FinanceEntity.fromJson(map));
}
}
return list;
}
}
5.测试数据
FinanceDao dao = FinanceDao();
FinanceEntity todo = FinanceEntity(title: "测试一", text: "我是测试文本");
dao.insertTodo(todo);