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.user
或 context.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
更多关于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'),
),
],
),
),
),
);
}
}