Flutter数据库可视化插件sqlite_viewer的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter数据库可视化插件sqlite_viewer的使用

本Flutter插件提供了一个小部件来展示SQLite数据库的内容。

💻 安装

在你的pubspec.yaml文件的dependencies:部分添加以下行:

dependencies:
  sqlite_viewer: <最新版本>

❔ 使用

导入此类

import 'package:sqlite_viewer/sqlite_viewer.dart';

打开页面

Navigator.push(context, MaterialPageRoute(builder: (_) => DatabaseList()))

👍 贡献

  1. Fork该项目
  2. 创建一个新的特性分支 (git checkout -b my-new-feature)
  3. 提交更改 (git commit -m '添加一些功能')
  4. 推送到分支 (git push origin my-new-feature)
  5. 创建新的Pull Request

🧡 感谢


示例代码

文件:example/lib/main.dart

import 'dart:math';

import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:sqlite_viewer/sqlite_viewer.dart';

import './models/test.dart';

void main() => runApp(MyApp());

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

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text('示例'),
        actions: <Widget>[
          new IconButton(
            icon: new Icon(Icons.folder),
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (_) => DatabaseList(),
                ),
              );
            },
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          Future<int?> future = _add(
            Test(
              column1: _getRandom(),
              column2: _getRandom(),
              column3: _getRandom(),
            ),
          );
          future
              .then((value) => print(value))
              .catchError((error) => print(error));
        },
      ),
    );
  }

  Future<int?> _add(Test test) async {
    final TestDatabaseProvider provider = TestDatabaseProvider();
    final Database? database = await provider.database;
    return await database?.insert(provider.tableName, test.toMap());
  }

  String _getRandom() {
    const _randomChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    const _charsLength = _randomChars.length;

    final rand = new Random();
    final codeUnits = new List.generate(
      20,
      (index) {
        final n = rand.nextInt(_charsLength);
        return _randomChars.codeUnitAt(n);
      },
    );

    return String.fromCharCodes(codeUnits);
  }
}

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

1 回复

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


当然,关于如何在Flutter项目中集成并使用sqlite_viewer插件来进行数据库可视化,以下是一个基本的代码示例。请注意,sqlite_viewer并不是一个广泛认知的Flutter插件,且直接用于数据库可视化的Flutter插件并不常见。通常,数据库的可视化是在开发环境中通过桌面工具(如DB Browser for SQLite)或后端管理工具完成的。然而,为了展示如何在Flutter中与SQLite数据库交互,我们可以使用sqlite3_flutter或其他类似插件,并展示基本的数据库操作。

如果你确实需要一个可视化的数据库查看器,你可能需要在Flutter应用中嵌入一个WebView,并加载一个支持SQLite可视化的网页应用。但在这里,我们将重点放在Flutter与SQLite的交互上。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  sqlite3_flutter: ^0.14.0  # 请检查最新版本号

2. 初始化数据库

在你的Flutter应用中,初始化SQLite数据库并执行一些基本的操作:

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SQLite Demo'),
        ),
        body: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Database? _db;

  @override
  void initState() {
    super.initState();
    initDatabase();
  }

  Future<void> initDatabase() async {
    // 打开数据库连接
    _db = await openDatabase(inMemoryDatabasePath, version: 1, onCreate: (Database db, int version) async {
      // 当数据库首次创建时执行的操作
      await db.execute(
        'CREATE TABLE IF NOT EXISTS users ('
        'id INTEGER PRIMARY KEY AUTOINCREMENT,'
        'name TEXT NOT NULL,'
        'age INTEGER NOT NULL'
        ')'
      );
    });
  }

  Future<void> insertUser(String name, int age) async {
    final db = _db!;
    await db.insert(
      'users',
      {'name': name, 'age': age},
      conflictAlgorithm: ConflictAlgorithm.replace
    );
  }

  Future<List<Map<String, Object?>>> getUsers() async {
    final db = _db!;
    final List<Map<String, Object?>> result = await db.query('users');
    return result;
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Text('Insert User:', style: TextStyle(fontSize: 18)),
          ElevatedButton(
            onPressed: () {
              insertUser('Alice', 30);
            },
            child: Text('Alice, 30'),
          ),
          ElevatedButton(
            onPressed: () {
              insertUser('Bob', 25);
            },
            child: Text('Bob, 25'),
          ),
          SizedBox(height: 20),
          Text('Users:', style: TextStyle(fontSize: 18)),
          FutureBuilder<List<Map<String, Object?>>>(
            future: getUsers(),
            builder: (BuildContext context, AsyncSnapshot<List<Map<String, Object?>>> snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error}');
                }
                return ListView.builder(
                  itemCount: snapshot.data!.length,
                  itemBuilder: (BuildContext context, int index) {
                    return ListTile(
                      title: Text('ID: ${snapshot.data![index]['id']}, Name: ${snapshot.data![index]['name']}, Age: ${snapshot.data![index]['age']}'),
                    );
                  },
                );
              } else {
                return CircularProgressIndicator();
              }
            },
          ),
        ],
      ),
    );
  }
}

3. 注意事项

  • 上述代码示例展示了如何在Flutter中使用sqlite3_flutter插件来创建、插入和查询SQLite数据库中的数据。
  • 为了实现数据库的可视化,你可能需要考虑将数据库导出为文件,并使用桌面工具(如DB Browser for SQLite)进行查看,或者在你的Flutter应用中嵌入一个支持SQLite可视化的WebView。
  • 请确保在实际应用中处理异常和错误,以及管理数据库连接的生命周期。

如果你确实找到了一个名为sqlite_viewer的Flutter插件,并且它提供了数据库可视化的功能,请查阅该插件的官方文档以获取具体的集成和使用指南。由于该插件不是广泛认知的,上述代码示例是基于sqlite3_flutter插件的通用SQLite操作示例。

回到顶部