centos

centos下flutter数据库操作如何实现

小樊
43
2025-08-10 16:17:39
栏目: 智能运维

在CentOS系统下进行Flutter数据库操作,通常会选择使用SQLite作为本地数据库。以下是实现步骤:

1. 安装Flutter

首先,确保你已经在CentOS上安装了Flutter。如果还没有安装,可以按照以下步骤进行:

# 下载Flutter SDK
wget https://storage.googleapis.com/flutter-release/releases/2.10.4/flutter-linux-x64.zip

# 解压
unzip flutter-linux-x64.zip -d /opt/flutter

# 配置环境变量
echo 'export PATH="$PATH:/opt/flutter/bin"' >> ~/.bashrc
source ~/.bashrc

# 验证安装
flutter doctor

2. 创建Flutter项目

创建一个新的Flutter项目:

flutter create my_flutter_app
cd my_flutter_app

3. 添加依赖

pubspec.yaml文件中添加SQLite依赖:

dependencies:
  flutter:
    sdk: flutter
  sqflite: ^2.0.0+4
  path_provider: ^2.0.2

然后运行以下命令来获取依赖:

flutter pub get

4. 初始化数据库

创建一个数据库帮助类来初始化和管理数据库。在lib目录下创建一个名为database_helper.dart的文件:

import 'dart:io';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';

class DatabaseHelper {
  static final _databaseName = "my_database.db";
  static final _databaseVersion = 1;
  static final table = 'my_table';
  static final columnId = 'id';
  static final columnTitle = 'title';

  // Make this a singleton class.
  DatabaseHelper._privateConstructor();
  static final DatabaseHelper instance = DatabaseHelper._privateConstructor();

  // Only have a single app-wide reference to the database.
  static Database? _database;
  Future<Database> get database async => _database ??= await _initDatabase();

  // Open the database and create the table if it doesn't exist.
  _initDatabase() async {
    Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, _databaseName);
    return await openDatabase(path,
        version: _databaseVersion, onCreate: _onCreate);
  }

  // SQL code to create the database table.
  Future _onCreate(Database db, int version) async {
    await db.execute('''
          CREATE TABLE $table (
            $columnId INTEGER PRIMARY KEY,
            $columnTitle TEXT NOT NULL
          )
          ''');
  }

  // Helper methods to insert, update, delete and query the database.
  Future<int> insert(Map<String, dynamic> row) async {
    Database db = await instance.database;
    return await db.insert(table, row);
  }

  Future<int> update(Map<String, dynamic> row) async {
    Database db = await instance.database;
    return await db.update(table, row, where: '$columnId = ?', whereArgs: [row[columnId]]);
  }

  Future<int> delete(int id) async {
    Database db = await instance.database;
    return await db.delete(table, where: '$columnId = ?', whereArgs: [id]);
  }

  Future<List<Map<String, dynamic>>> query(Map<String, dynamic> queryParams) async {
    Database db = await instance.database;
    return await db.query(table,
        where: queryParams['where'],
        whereArgs: queryParams['whereArgs']);
  }
}

5. 使用数据库帮助类

在你的Flutter应用中使用DatabaseHelper类来进行数据库操作。例如,在一个简单的页面中插入、查询和删除数据:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  final DatabaseHelper _databaseHelper = DatabaseHelper.instance;
  List<Map<String, dynamic>> _data = [];

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

  Future<void> _loadData() async {
    final data = await _databaseHelper.query({'where': '1=1'});
    setState(() {
      _data = data;
    });
  }

  Future<void> _insertData() async {
    await _databaseHelper.insert({
      DatabaseHelper.columnTitle: 'New Title'
    });
    _loadData();
  }

  Future<void> _deleteData(int id) async {
    await _databaseHelper.delete(id);
    _loadData();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        ElevatedButton(
          onPressed: _insertData,
          child: Text('Insert Data'),
        ),
        Expanded(
          child: ListView.builder(
            itemCount: _data.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(_data[index][DatabaseHelper.columnTitle]),
                trailing: ElevatedButton(
                  onPressed: () => _deleteData(_data[index][DatabaseHelper.columnId]),
                  child: Text('Delete'),
                ),
              );
            },
          ),
        ),
      ],
    );
  }
}

6. 运行应用

最后,运行你的Flutter应用:

flutter run

这样,你就可以在CentOS系统下使用Flutter进行SQLite数据库操作了。

0
看了该问题的人还看了