Flutter项目结构
你需要创建一个新的Flutter项目,如果你还没有安装Flutter,可以从[Flutter官方网站](https://flutter.dev/)下载并安装。
flutter create my_app cd my_app
添加依赖项
在pubspec.yaml
文件中,确保你有以下依赖项:
dependencies: flutter: sdk: flutter sqflite: ^2.0.0+3 # SQLite数据库 path: ^1.8.0 # 路径处理 path_provider: ^2.0.9 # 获取系统路径
然后运行以下命令来安装这些依赖项:
flutter pub get
创建数据库帮助类
在项目的根目录下创建一个名为database
的文件夹,并在其中创建一个名为database_helper.dart
的文件。
// lib/database/database_helper.dart import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; class DatabaseHelper { static final DatabaseHelper _instance = DatabaseHelper.internal(); static Database? _db; factory DatabaseHelper() { return _instance; } Future<Database> openDb() async { if (_db != null) { return _db!; } _db = await initDb(); return _db!; } Future<Database> initDb() async { var databasePath = await getDatabasesPath(); String path = join(databasePath, 'my_database.db'); return await openDatabase(path, version: 1, onCreate: (db, version) { return db.execute( "CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)", ); }); } }
4. 创建数据模型和DAO(数据访问对象)
在lib
目录下创建一个名为models
的文件夹,并在其中创建一个名为user_model.dart
的文件。
// lib/models/user_model.dart class User { final int? id; final String name; final int age; User({this.id, required this.name, required this.age}); Map<String, dynamic> toMap() { return { 'name': name, 'age': age, }; } }
实现用户操作的DAO类
在lib/database
目录下创建一个名为user_dao.dart
的文件。
// lib/database/user_dao.dart import 'package:sqflite/sqflite.dart'; import '../models/user_model.dart'; class UserDao { final Database db; UserDao(this.db); Future<List<User>> getUsers() async { final 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'], age: maps[i]['age']); }); } Future<void insertUser(User user) async { await db.insert( 'user', user.toMap(), conflictAlgorithm: ConflictAlgorithm.replace, ); } }
创建UI界面和逻辑控制层
在lib
目录下创建一个名为main.dart
的文件,这是Flutter应用的入口文件。
// lib/main.dart import 'package:flutter/material.dart'; import 'package:my_app/database/database_helper.dart'; import 'package:my_app/database/user_dao.dart'; import 'package:my_app/models/user_model.dart'; void main() async { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'My App', home: HomePage(), ); } } class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { final TextEditingController nameController = TextEditingController(); final TextEditingController ageController = TextEditingController(); final UserDao userDao = UserDao(await DatabaseHelper().openDb()); late List<User> users; @override void initState() { super.initState(); refreshUsers(); } Future<void refreshUsers() async { setState(() { users = await userDao.getUsers(); }); } Future<void addUser() async { final String name = nameController.text; final int age = int.parse(ageController.text); final User newUser = User(name: name, age: age); await userDao.insertUser(newUser); refreshUsers(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('My App'), ), body: Padding( padding: EdgeInsets.all(16.0), child: Column( children: [ TextField(controller: nameController, decoration: InputDecoration(labelText: 'Name')), TextField(controller: ageController, keyboardType: TextInputType.number, decoration: InputDecoration(labelText: 'Age')), ElevatedButton(onPressed: addUser, child: Text('Add User')), Expanded(child: ListView.builder(itemCount: users.length, itemBuilder: (context, index) { final user = users[index]; return ListTile(title: Text('${user.name}, ${user.age}')); })), ], ), ), ); } }
这样,你就完成了一个简单的Flutter应用,带有本地SQLite数据库的基本功能,你可以根据需要扩展这个基础代码,例如添加更多的表、更复杂的查询、更新和删除操作等。
小伙伴们,上文介绍了“app 源码 带数据库”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/711957.html