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,
));

编辑isDrawer


更多关于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();
  }
}

在这个示例中:

  1. 我们使用EFSQLite.getInstance('my_database.db')来打开或创建一个名为my_database.db的SQLite数据库。
  2. 使用execute方法执行SQL语句来创建表、插入数据。
  3. 使用rawQuery方法执行查询操作,并将结果打印到控制台。
  4. dispose方法中关闭数据库连接,确保资源得到释放。

请注意,这只是一个简单的示例。在实际应用中,你可能需要更复杂的错误处理、事务管理以及更复杂的查询逻辑。确保你阅读efsqlite的官方文档,以获取更多详细信息和高级用法。

回到顶部