Flutter数据库管理插件efsqlite的使用
Flutter数据库管理插件efsqlite的使用
efsqlite Package For Easy DB With Provider AutoMap No Generator
- efsqlite 可以轻松管理数据库
- 它自动映射数据
- 无需生成器
- 自动主键生成
- 使用Provider
- 支持自定义查询
- 可移除数据库
- 支持枚举
- 支持添加、删除、编辑和获取任何模型
- 全面的应用设计使用EFMaterialApp
- 可从模型调用操作
- 表默认项
- 自动索引
Link For Youtube Docs
导入efsqlite.dart
import '../../efsqlite.dart';
创建类 (database.dart)
class Todo extends IModel {
Todo({this.id, this.name, this.isDone});
int? id;
String? name;
bool? isDone;
}
创建表 (database.dart)
EFTable<Todo> tb_todos = EFTable(
tableName: "todos",
primrayKeyType: PrimaryKeyEnum.AutoIncrement,
properties: [
EFProperty(
name: "name",
type: TypeEnum.STRING,
propertyGet: (e) => e.name,
propertySet: (e, v) => e.name = v,
isIndexed: true,
),
EFProperty(
name: "isDone",
type: TypeEnum.BOOL,
propertySet: (e, v) => e.isDone = v,
propertyGet: (e) => e.isDone,
),
],
primaryKeyGet: (e) => e.id,
primaryKeySet: (e, v) => e.id = v,
newEmptyObject: () => Todo(),
);
创建Sqlite数据 (database.dart)
SqliteData data = SqliteData(
tables: [tb_todos],
databaseName: "AppDb"
);
创建Sqlite查询 (database.dart)
SqliteQuery<Todo> TodosManager = SqliteQuery(
data: data,
table: tb_todos
);
创建视图 (main.dart)
import './database.dart';
import 'package:flutter/material.dart';
import '../../efsqlite.dart';
void main() {
runApp(EfMaterialApp(
theme: ThemeData(primarySwatch: Colors.blue),
data: data,
pages: [
ModelPage<Todo>(
page: (scaffold, heightDialog) =>
ManagePage<Todo>(
scaffold: scaffold,
query: TodosManager,
heightDialog: heightDialog,
),
table: tb_todos,
appBarName: "Todos",
icon: Icons.today_outlined,
),
],
isDrawer: false,
));
}
预览 你可以编辑主题
database.dart
import '../../efsqlite.dart';
class Todo extends IModel {
Todo({this.id, this.name, this.isDone});
int? id;
String? name;
bool? isDone;
}
class TodoVaction extends IModel {
TodoVaction({this.id, this.name, this.isDone});
int? id;
String? name;
bool? isDone;
}
EFTable<Todo> tb_todos = EFTable(
tableName: "todos",
primrayKeyType: PrimaryKeyEnum.AutoIncrement,
properties: [
EFProperty(
name: "name",
type: TypeEnum.STRING,
propertyGet: (e) => e.name,
propertySet: (e, v) => e.name = v,
isIndexed: true,
),
EFProperty(
name: "isDone",
type: TypeEnum.BOOL,
propertySet: (e, v) => e.isDone = v,
propertyGet: (e) => e.isDone,
),
],
primaryKeyGet: (e) => e.id,
primaryKeySet: (e, v) => e.id = v,
newEmptyObject: () => Todo(),
);
EFTable<TodoVaction> tb_todoVactions = EFTable(
tableName: "todoVactions",
primrayKeyType: PrimaryKeyEnum.AutoIncrement,
properties: [
EFProperty(
name: "name",
type: TypeEnum.STRING,
propertyGet: (e) => e.name,
propertySet: (e, v) => e.name = v,
isIndexed: true,
),
EFProperty(
name: "isDone",
type: TypeEnum.BOOL,
propertySet: (e, v) => e.isDone = v,
propertyGet: (e) => e.isDone,
),
],
primaryKeyGet: (e) => e.id,
primaryKeySet: (e, v) => e.id = v,
newEmptyObject: () => TodoVaction(),
);
SqliteData data =
SqliteData(tables: [tb_todos, tb_todoVactions], databaseName: "AppDb");
SqliteQuery<Todo> TodosManager = SqliteQuery(data: data, table: tb_todos);
SqliteQuery<TodoVaction> TodoVactionsManager =
SqliteQuery(data: data, table: tb_todoVactions);
main.dart
import './database.dart';
import 'package:flutter/material.dart';
import '../../efsqlite.dart';
void main() {
runApp(EfMaterialApp(
theme: ThemeData(primarySwatch: Colors.blue),
data: data,
pages: [
ModelPage<Todo>(
page: (scaffold, heightDialog) => ManagePage(
scaffold: scaffold,
query: TodosManager,
heightDialog: heightDialog,
),
table: tb_todos,
appBarName: "Todos",
icon: Icons.today_outlined,
),
ModelPage<TodoVaction>(
page: (scaffold, heightDialog) => ManagePage(
scaffold: scaffold,
query: TodoVactionsManager,
heightDialog: heightDialog,
),
table: tb_todoVactions,
appBarName: "TodosVaction",
icon: Icons.card_travel_rounded,
),
],
));
}
预览结果 你可以编辑主题
如果我们编辑isDrawer
runApp(EfMaterialApp(
...,
isDrawer: false,
));
更多关于Flutter数据库管理插件efsqlite的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter数据库管理插件efsqlite的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用efsqlite
插件进行数据库管理的代码案例。efsqlite
是一个轻量级的SQLite数据库管理插件,允许你在Flutter应用中执行SQLite查询和操作。
首先,你需要在你的Flutter项目中添加efsqlite
依赖。打开你的pubspec.yaml
文件,并添加以下依赖:
dependencies:
flutter:
sdk: flutter
efsqlite: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,我们编写一些代码来演示如何使用efsqlite
进行数据库操作。以下是一个完整的Flutter应用示例,包括打开数据库、创建表、插入数据、查询数据和关闭数据库。
import 'package:flutter/material.dart';
import 'package:efsqlite/efsqlite.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter efsqlite Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late EFSQLite _db;
@override
void initState() {
super.initState();
initDatabase();
}
void initDatabase() async {
// 打开数据库连接
_db = await EFSQLite.getInstance('my_database.db');
// 创建表
String createTableQuery = '''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
);
''';
await _db.execute(createTableQuery);
// 插入数据
String insertDataQuery = '''
INSERT INTO users (name, age) VALUES ('Alice', 30);
INSERT INTO users (name, age) VALUES ('Bob', 25);
''';
await _db.execute(insertDataQuery);
// 查询数据
List<Map<String, dynamic>> results = await _db.rawQuery('SELECT * FROM users');
print('Query Results: $results');
// 关闭数据库连接(通常在应用关闭或不再需要数据库时调用)
// 注意:这里为了演示,我们没有立即关闭数据库。
// 实际应用中,你可能需要在dispose()方法中关闭数据库连接。
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter efsqlite Demo'),
),
body: Center(
child: Text('Database initialized and queried. Check console for results.'),
),
);
}
@override
void dispose() {
// 关闭数据库连接(在组件销毁时调用)
_db.close();
super.dispose();
}
}
在这个示例中:
- 我们使用
EFSQLite.getInstance('my_database.db')
来打开或创建一个名为my_database.db
的SQLite数据库。 - 使用
execute
方法执行SQL语句来创建表、插入数据。 - 使用
rawQuery
方法执行查询操作,并将结果打印到控制台。 - 在
dispose
方法中关闭数据库连接,确保资源得到释放。
请注意,这只是一个简单的示例。在实际应用中,你可能需要更复杂的错误处理、事务管理以及更复杂的查询逻辑。确保你阅读efsqlite
的官方文档,以获取更多详细信息和高级用法。