Flutter数据库操作插件fx_dao的使用

Flutter数据库操作插件fx_dao的使用

在Flutter应用开发中,处理数据库操作是一个常见的需求。fx_dao 插件可以帮助开发者更方便地进行数据库的操作。本文将通过一个完整的示例演示如何使用 fx_dao 插件来创建数据库、插入数据、查询数据和删除数据。

安装插件

首先,在你的 pubspec.yaml 文件中添加 fx_dao 依赖:

dependencies:
  fx_dao: ^1.0.0 # 请根据实际情况选择合适的版本

然后运行 flutter pub get 命令来安装该插件。

创建数据库表

假设我们要创建一个用户表,包含 idname 字段。首先需要定义数据模型类:

import 'package:fx_dao/fx_dao.dart';

class User extends DataModel {
  int? id;
  String name;

  User({this.id, required this.name});

  @override
  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'name': name,
    };
  }

  @override
  fromMap(Map<String, dynamic> map) {
    return User(
      id: map['id'],
      name: map['name'],
    );
  }
}

初始化数据库

接下来初始化数据库并创建表:

import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:fx_dao/fx_dao.dart';

Future<Database> initDB() async {
  // 获取数据库路径
  var databasesPath = await getDatabasesPath();
  String path = join(databasesPath, 'demo.db');

  // 打开/创建数据库
  Database database = await openDatabase(path, version: 1, onCreate: (db, version) async {
    // 创建用户表
    await db.execute('''
      CREATE TABLE user (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL
      )
    ''');
  });

  return database;
}

插入数据

现在我们可以在数据库中插入一条用户记录:

Future<void> insertUser(User user) async {
  final db = await initDB();
  
  await db.insert(
    'user',
    user.toMap(),
    conflictAlgorithm: ConflictAlgorithm.replace,
  );

  print("User inserted");
}

查询数据

查询用户表中的所有记录:

Future<List<User>> getUsers() async {
  final db = await initDB();

  List<Map<String, dynamic>> maps = await db.query('user');

  return List.generate(maps.length, (i) {
    return User(
      id: maps[i]['id'],
      name: maps[i]['name'],
    );
  });
}

删除数据

删除指定ID的用户记录:

Future<void> deleteUser(int id) async {
  final db = await initDB();

  await db.delete(
    'user',
    where: "id = ?",
    whereArgs: [id],
  );

  print("User deleted");
}

使用示例

最后,我们将这些方法组合起来,展示如何使用 fx_dao 插件:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化数据库
  final db = await initDB();

  // 插入用户
  await insertUser(User(name: '张三'));

  // 查询所有用户
  List<User> users = await getUsers();
  for (var user in users) {
    print(user.id);
    print(user.name);
  }

  // 删除用户
  await deleteUser(users[0].id);
}

更多关于Flutter数据库操作插件fx_dao的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库操作插件fx_dao的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


fx_dao 是一个用于 Flutter 的数据库操作插件,它基于 sqflite,并提供了一种更简单的方式来管理数据库表和执行 CRUD 操作。fx_dao 的设计灵感来自于 Android 的 Room 库,旨在简化 Flutter 应用中的数据库操作。

安装 fx_dao

首先,你需要在 pubspec.yaml 文件中添加 fx_dao 依赖:

dependencies:
  flutter:
    sdk: flutter
  fx_dao: ^latest_version

然后运行 flutter pub get 来安装依赖。

使用 fx_dao

1. 定义实体类

首先,你需要定义一个实体类来表示数据库中的表。使用 @Entity 注解来标记这个类,并使用 @Column 注解来标记字段。

import 'package:fx_dao/fx_dao.dart';

@Entity(tableName: 'users')
class User {
  @Column(isPrimaryKey: true, autoIncrement: true)
  int? id;

  @Column()
  String name;

  @Column()
  int age;

  User({this.id, required this.name, required this.age});
}

2. 创建 DAO 接口

接下来,你需要定义一个 DAO(Data Access Object)接口来执行数据库操作。使用 @Dao 注解来标记这个接口。

import 'package:fx_dao/fx_dao.dart';

@Dao()
abstract class UserDao {
  @Query('SELECT * FROM users')
  Future<List<User>> getAllUsers();

  @Query('SELECT * FROM users WHERE id = :id')
  Future<User?> getUserById(int id);

  @Insert()
  Future<void> insertUser(User user);

  @Update()
  Future<void> updateUser(User user);

  @Delete()
  Future<void> deleteUser(User user);
}

3. 创建数据库

然后,你需要创建一个数据库类,并使用 @Database 注解来标记它。在这个类中,你需要指定数据库的版本号和包含的实体类。

import 'package:fx_dao/fx_dao.dart';

@Database(version: 1, entities: [User])
abstract class AppDatabase extends FxDatabase {
  UserDao get userDao;
}

4. 初始化数据库

在你的应用中初始化数据库:

import 'package:fx_dao/fx_dao.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final database = await $FloorAppDatabase.databaseBuilder('app_database.db').build();
  final userDao = database.userDao;

  runApp(MyApp(userDao: userDao));
}

5. 使用 DAO 执行操作

现在你可以在应用中使用 UserDao 来执行数据库操作了。

class MyApp extends StatelessWidget {
  final UserDao userDao;

  MyApp({required this.userDao});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('fx_dao Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async {
                  final user = User(name: 'John Doe', age: 30);
                  await userDao.insertUser(user);
                },
                child: Text('Insert User'),
              ),
              ElevatedButton(
                onPressed: () async {
                  final users = await userDao.getAllUsers();
                  print(users);
                },
                child: Text('Get All Users'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部