Flutter数据库CRUD操作插件fire_crud_flutter的使用

Flutter数据库CRUD操作插件fire_crud_flutter的使用

使用

首先确保在项目中使用 fire_crud 插件,并配置好数据模型。你可能还需要熟悉一下 pylon

import 'package:fire_crud_flutter/fire_crud_flutter.dart';

模型视图

数据视图从Firestore流式获取一个模型并提供一个 pylon。在这些示例中,我们将使用 context.usercontext.xyz。这假定你已经创建了一个扩展类,该类简单地将 User get user => pylon

ModelView<User>(
  id: "theUserId",
  builder: (context) => Scaffold(
    appBar: AppBar(title: Text(context.user.name)),
  ),
);

模型列表

模型列表从Firestore流式获取一组模型,并为每个条目提供一个 pylon。这些列表只在需要时流式处理一小部分列表,并根据列表当前构建的位置进行重新定位。对于小列表且不会爆炸性增长的情况,你可以使用 ModelColumn

ModelList<User>(
  query: (q) => q.where("age", isGreaterThan: 18),
  builder: (context) => ListTile(
    title: Text(context.user.name),
  ),
);

隐式模型

由于 pylon 在幕后被使用,你可以仅通过类型访问一个模型,父模型 ID 通过查找上下文中的先前数据提供者来找到。

注意:这假定“Note”模型位于每个“User”模型下的“notes”集合中,如下所示:

  • User(例如 users/USERID)
    • Note(例如 users/USERID/notes/NOTEID)
class MainScreen extends StatelessWidget {
  const MainScreen({super.key});

  Widget build(BuildContext context) => ModelList<User>(
        builder: (context) => ListTile(
          title: Text(context.user.name),
          onTap: () => Pylon.push(context, UserScreen()),
        ),
      );
}

class UserScreen extends StatelessWidget {
  const UserScreen({super.key});

  // 从上下文中隐式获取用户模型并使用它
  Widget build(BuildContext context) => ModelList<Note>(
        builder: (context) => ListTile(
          title: Text(context.note.title),
          onTap: () => Pylon.push(context, NoteScreen()),
        ),
      );
}

class NoteScreen extends StatelessWidget {
  const NoteScreen({super.key});

  // 除非你需要实时流式传输此笔记,否则你不需要模型视图
  // 否则你仍然可以访问上一个屏幕不变的列表项
  // 注意:我们在这里不定义id,因为它很明显。我们告诉ModelView隐式地从上下文中找到笔记模型,然后重新流式传输以获取更新。
  Widget build(BuildContext context) => ModelView<Note>(
    builder: (context) => Scaffold(
      appBar: AppBar(title: Text(context.note.title)),
    ),
  );
}

更多关于Flutter数据库CRUD操作插件fire_crud_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


fire_crud_flutter 是一个用于简化 Flutter 应用中数据库 CRUD(创建、读取、更新、删除)操作的插件。它通常与 Firebase Firestore 或其他 NoSQL 数据库一起使用,以提供一种简单的方式来执行常见的数据库操作。

以下是如何使用 fire_crud_flutter 插件进行基本的 CRUD 操作的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  fire_crud_flutter: ^latest_version
  cloud_firestore: ^latest_version  # 如果你使用 Firestore

然后运行 flutter pub get 来安装依赖。

2. 初始化 Firestore

在使用 fire_crud_flutter 之前,确保你已经初始化了 Firestore:

import 'package:firebase_core/firebase_core.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

3. 创建模型

创建一个模型类来表示你的数据。例如,假设你有一个 User 模型:

class User {
  String id;
  String name;
  int age;

  User({this.id, this.name, this.age});

  // 从 Firestore 文档到 User 对象的转换
  factory User.fromFirestore(DocumentSnapshot doc) {
    Map data = doc.data();
    return User(
      id: doc.id,
      name: data['name'],
      age: data['age'],
    );
  }

  // 从 User 对象到 Map 的转换,用于保存到 Firestore
  Map<String, dynamic> toFirestore() {
    return {
      'name': name,
      'age': age,
    };
  }
}

4. 使用 fire_crud_flutter 进行 CRUD 操作

创建(Create)

使用 FireCrud 来创建新文档:

import 'package:fire_crud_flutter/fire_crud_flutter.dart';

Future<void> createUser(User user) async {
  await FireCrud.create(
    collection: 'users',
    data: user.toFirestore(),
  );
}

读取(Read)

读取所有用户文档:

Future<List<User>> getUsers() async {
  QuerySnapshot snapshot = await FireCrud.read(collection: 'users');
  return snapshot.docs.map((doc) => User.fromFirestore(doc)).toList();
}

读取单个用户文档:

Future<User> getUser(String id) async {
  DocumentSnapshot doc = await FireCrud.read(collection: 'users', id: id);
  return User.fromFirestore(doc);
}

更新(Update)

更新用户文档:

Future<void> updateUser(User user) async {
  await FireCrud.update(
    collection: 'users',
    id: user.id,
    data: user.toFirestore(),
  );
}

删除(Delete)

删除用户文档:

Future<void> deleteUser(String id) async {
  await FireCrud.delete(collection: 'users', id: id);
}

5. 示例使用

在你的 Flutter 应用中使用这些方法:

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Fire CRUD Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async {
                  User newUser = User(id: null, name: 'John Doe', age: 30);
                  await createUser(newUser);
                  print('User created');
                },
                child: Text('Create User'),
              ),
              ElevatedButton(
                onPressed: () async {
                  List<User> users = await getUsers();
                  users.forEach((user) => print('User: ${user.name}'));
                },
                child: Text('Get Users'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部