在CentOS系统下进行Flutter数据库操作,通常会选择使用SQLite作为本地数据库。以下是实现步骤:
首先,确保你已经在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
创建一个新的Flutter项目:
flutter create my_flutter_app
cd my_flutter_app
在pubspec.yaml文件中添加SQLite依赖:
dependencies:
flutter:
sdk: flutter
sqflite: ^2.0.0+4
path_provider: ^2.0.2
然后运行以下命令来获取依赖:
flutter pub get
创建一个数据库帮助类来初始化和管理数据库。在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']);
}
}
在你的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'),
),
);
},
),
),
],
);
}
}
最后,运行你的Flutter应用:
flutter run
这样,你就可以在CentOS系统下使用Flutter进行SQLite数据库操作了。