Flutter设备数据库管理插件database_device的使用

Flutter设备数据库管理插件database_device的使用

使用说明

database_device 是一个用于管理设备数据库的 Flutter 插件。它提供了多种功能,例如添加、删除、编辑和移动数据等操作,并且支持实时更新界面。

依赖配置

在使用 database_device 插件之前,需要在项目的 pubspec.yaml 文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  database_device: ^0.0.4

然后执行以下命令以安装依赖:

flutter pub get

示例代码

以下是一个完整的示例代码,展示了如何使用 database_device 插件来管理设备数据库。

import 'package:flutter/material.dart';
import 'package:database_device/database_device.dart';

void main() {
  runApp(const MyApp());
}

// 主应用
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Database Device',
      debugShowCheckedModeBanner: false,
      home: DatabaseDeviceWidget(),
    );
  }
}

// 数据库设备管理页面
class DatabaseDeviceWidget extends StatefulWidget {
  const DatabaseDeviceWidget({Key? key}) : super(key: key);

  [@override](/user/override)
  State<DatabaseDeviceWidget> createState() => _DatabaseDeviceWidgetState();
}

class _DatabaseDeviceWidgetState extends State<DatabaseDeviceWidget> {
  // 获取字符数量
  getLingthChar() async {
    int a = await DatabaseDevice.lengthChar;
    characterCount = a;
  }

  List list = [];
  int characterCount = 0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Database Device"),
        actions: [
          // 清空所有数据按钮
          IconButton(
            onPressed: () => DatabaseDevice.removeAllData(),
            icon: const Icon(Icons.delete),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        child: const Icon(Icons.add),
        onPressed: () =>
            DatabaseDevice.add(
              Description(
                age: 22,
                name: 'Raed',
              ).toMap(),
            ),
      ),
      body: DatabaseDevice.childFutureBuilder(
        getData: (data) {
          setState(() {
            list = data;

            getLingthChar();
          });
        },
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            // 显示字符数量
            Padding(
                padding: const EdgeInsets.all(12),
                child: Text("Character count = $characterCount")),
            // 可重排序列表
            Expanded(
              flex: 1,
              child: ReorderableListView.builder(
                onReorder: (oldIndex, newIndex) =>
                    DatabaseDevice.moveIteam(oldIndex, newIndex),
                itemCount: list.length,
                itemBuilder: ((context, index) => Card(
                      key: ValueKey(index),
                      elevation: 7,
                      color: Colors.amber.shade400,
                      child: Column(
                        children: [
                          Container(
                            alignment: Alignment.center,
                            height: 100,
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.spaceAround,
                              children: [
                                Text(list[index]['key'].toString()),
                                Text(list[index]['name']),
                                Text(list[index]['age'].toString()),
                              ],
                            ),
                          ),
                          Container(
                            height: 50,
                            color: Colors.amber.shade100,
                            child: Row(
                              children: [
                                // 删除行按钮
                                IconButton(
                                  onPressed: () =>
                                      DatabaseDevice.removeRow(index),
                                  icon: const Icon(Icons.delete),
                                ),
                                // 复制行并添加到末尾按钮
                                IconButton(
                                  onPressed: () =>
                                      DatabaseDevice.copyAddPast(index),
                                  icon: const Icon(Icons.copy),
                                ),
                                // 编辑字段按钮
                                TextButton(
                                  onPressed: () =>
                                      DatabaseDevice.editeFild(
                                        index,
                                        {
                                          "name": 'Ali',
                                        },
                                      ),
                                  child: const Text('edit name'),
                                ),
                                // 编辑整行按钮
                                IconButton(
                                  onPressed: () =>
                                      DatabaseDevice.editeRow(
                                        index,
                                        Description(
                                          age: 33,
                                          name: 'Anas',
                                        ).toMap(),
                                      ),
                                  icon: const Icon(Icons.edit),
                                ),
                              ],
                            ),
                          )
                        ],
                      ),
                    )),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

// 用户类
class User {
  int idCard;
  Description description;
  User({
    required this.idCard,
    required this.description,
  });

  Map<String, dynamic> toMap() {
    return {
      'idCard': idCard,
      'description': description.toMap(),
    };
  }

  factory User.fromMap(Map<String, dynamic> map) {
    return User(
      idCard: map['idCard']?.toInt() ?? 0,
      description: Description.fromMap(map['description']),
    );
  }
}

// 描述类
class Description {
  String name;
  int age;
  Description({
    required this.name,
    required this.age,
  });

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

  factory Description.fromMap(Map<String, dynamic> map) {
    return Description(
      name: map['name'] ?? '',
      age: map['age']?.toInt() ?? 0,
    );
  }
}

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

1 回复

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


database_device 是一个用于在 Flutter 应用中管理设备本地数据库的插件。它提供了一种简单的方式来创建、查询、更新和删除设备上的数据库记录。以下是如何使用 database_device 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  database_device: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化数据库

在使用数据库之前,你需要初始化它。通常,你可以在应用的 main 函数中或某个初始化函数中进行初始化。

import 'package:database_device/database_device.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化数据库
  await DatabaseDevice.initialize(
    databaseName: 'my_database.db',
    version: 1,
    onCreate: (db, version) async {
      // 创建表
      await db.execute('''
        CREATE TABLE users (
          id INTEGER PRIMARY KEY AUTOINCREMENT,
          name TEXT,
          age INTEGER
        )
      ''');
    },
    onUpgrade: (db, oldVersion, newVersion) {
      // 数据库升级逻辑
    },
  );

  runApp(MyApp());
}

3. 插入数据

你可以使用 DatabaseDevice 提供的 insert 方法来插入数据。

Future<void> insertUser() async {
  final db = await DatabaseDevice.database;
  await db.insert(
    'users',
    {
      'name': 'John Doe',
      'age': 30,
    },
  );
}

4. 查询数据

你可以使用 query 方法来查询数据。

Future<List<Map<String, dynamic>>> getUsers() async {
  final db = await DatabaseDevice.database;
  return await db.query('users');
}

5. 更新数据

你可以使用 update 方法来更新数据。

Future<void> updateUser(int id, String newName) async {
  final db = await DatabaseDevice.database;
  await db.update(
    'users',
    {
      'name': newName,
    },
    where: 'id = ?',
    whereArgs: [id],
  );
}

6. 删除数据

你可以使用 delete 方法来删除数据。

Future<void> deleteUser(int id) async {
  final db = await DatabaseDevice.database;
  await db.delete(
    'users',
    where: 'id = ?',
    whereArgs: [id],
  );
}

7. 关闭数据库

在应用退出时,你可以选择关闭数据库以释放资源。

Future<void> closeDatabase() async {
  final db = await DatabaseDevice.database;
  await db.close();
}

8. 使用示例

以下是一个简单的示例,展示了如何在 Flutter 应用中使用 database_device 插件。

import 'package:flutter/material.dart';
import 'package:database_device/database_device.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  await DatabaseDevice.initialize(
    databaseName: 'my_database.db',
    version: 1,
    onCreate: (db, version) async {
      await db.execute('''
        CREATE TABLE users (
          id INTEGER PRIMARY KEY AUTOINCREMENT,
          name TEXT,
          age INTEGER
        )
      ''');
    },
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  List<Map<String, dynamic>> users = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadUsers();
  }

  Future<void> _loadUsers() async {
    final data = await getUsers();
    setState(() {
      users = data;
    });
  }

  Future<List<Map<String, dynamic>>> getUsers() async {
    final db = await DatabaseDevice.database;
    return await db.query('users');
  }

  Future<void> _insertUser() async {
    final db = await DatabaseDevice.database;
    await db.insert(
      'users',
      {
        'name': 'Jane Doe',
        'age': 25,
      },
    );
    _loadUsers();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Database Device Example'),
      ),
      body: ListView.builder(
        itemCount: users.length,
        itemBuilder: (context, index) {
          final user = users[index];
          return ListTile(
            title: Text(user['name']),
            subtitle: Text('Age: ${user['age']}'),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _insertUser,
        child: Icon(Icons.add),
      ),
    );
  }
}
回到顶部