如何获取带有数据库的App源码?

小贝
预计阅读时长 17 分钟
位置: 首页 抖音 正文

Flutter项目结构

你需要创建一个新的Flutter项目,如果你还没有安装Flutter,可以从[Flutter官方网站](https://flutter.dev/)下载并安装。

app 源码 带数据库
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应用的入口文件。

app 源码 带数据库
// 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 源码 带数据库”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

-- 展开阅读全文 --
头像
探索服务器计算模块,性能、应用与未来趋势?
« 上一篇 2024-12-07
服务器编写工作能带来多少薪水?
下一篇 » 2024-12-07
取消
微信二维码
支付宝二维码

发表评论

暂无评论,5人围观

目录[+]