Flutter云数据库集成插件ha_firestore_scaffold的使用
Flutter云数据库集成插件ha_firestore_scaffold的使用
Firestore Scaffold
就像材料库中的Scaffold一样,Firestore Scaffold专门用于Firestore,它可以显示基于屏幕尺寸的实时分页列表视图或网格视图。你还可以根据查询添加搜索功能。
特性
- 📱 Firestore Scaffold
- 🔎 基于查询的搜索
- 📈 Firestore 实时分页
- 𝍌 列表视图样式
- ⌗ 分组列表视图
- 🌊 水流网格视图样式
开始使用
添加依赖
在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
ha_firestore_scaffold: # 最新版本
然后运行flutter pub get
来获取最新的依赖。
使用方法
使用HAFirestoreScaffold
作为普通的Scaffold来从Firestore查询中获取实时分页结果。
HAFirestoreScaffold(
title: widget.title,
query: FirebaseFirestore.instance
.collection("users")
.orderBy("addedDate", descending: true),
limit: (deviceType) {
return 50;
},
itembuilder: (context, snapshot) {
Map<String, dynamic> data = snapshot.data() as Map<String, dynamic>;
return ListTile(
title: Text(data['name'] ?? "no name"),
);
},
emptyWidget: const Center(
child: Text("no data found"),
),
)
搜索功能
你也可以在Scaffold中添加搜索功能,通过使用HAFirestoreSearch
作为searchDelegate
,其中searchField
将是一个包含字符串数组的文档字段。
HAFirestoreSearch(
firestoreQuery: FirebaseFirestore.instance
.collection("users")
.orderBy("addedDate", descending: true),
searchField: 'keywords',
builder: (context, snapshot) {
Map<String, dynamic> data = snapshot.data() as Map<String, dynamic>;
return ListTile(
title: Text(data['name'] ?? "no name"),
);
},
emptyWidget: const Center(
child: Text("no search data found"),
),
)
分组(粘性头部)
你可以在HAFirestoreScaffold
构造函数中传递groupBy
字段和header
小部件来对列表进行分组。
HAFirestoreScaffold(
...
groupBy: "addedDate",
header: (groupFieldValue) {
return Container(
color: Colors.white,
child: Text("$groupFieldValue"),
);
},
...
)
完整示例
以下是完整的示例代码,它展示了如何在Flutter应用中使用ha_firestore_scaffold
插件。
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:ha_firestore_scaffold/ha_firestore_scaffold.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'HAFirestore Scaffold',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'HAFirestore Scaffold'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return HAFirestoreScaffold(
title: widget.title,
query: FirebaseFirestore.instance
.collection("users")
.orderBy("addedDate", descending: true),
limit: (deviceType) {
return 50;
},
groupBy: "addedDate",
header: (groupFieldValue) {
return Container(
color: Colors.white,
child: Text("$groupFieldValue"),
);
},
itembuilder: (context, snapshot) {
Map<String, dynamic> data = snapshot.data() as Map<String, dynamic>;
return ListTile(
title: Text(data['name'] ?? "no name"),
);
},
emptyWidget: const Center(
child: Text("no data found"),
),
searchDelegate: HAFirestoreSearch(
firestoreQuery: FirebaseFirestore.instance
.collection("users")
.orderBy("addedDate", descending: true),
searchField: 'keywords',
builder: (context, snapshot) {
Map<String, dynamic> data = snapshot.data() as Map<String, dynamic>;
return ListTile(
title: Text(data['name'] ?? "no name"),
);
},
emptyWidget: const Center(
child: Text("no search data found"),
),
),
);
}
}
更多关于Flutter云数据库集成插件ha_firestore_scaffold的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter云数据库集成插件ha_firestore_scaffold的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,ha_firestore_scaffold
是一个用于 Flutter 的插件,它可以帮助开发者快速集成 Firebase Firestore 数据库,并生成相应的 UI 组件。以下是一个使用 ha_firestore_scaffold
的基本示例代码,展示如何设置和使用这个插件。
首先,确保你已经在你的 Flutter 项目中添加了 ha_firestore_scaffold
依赖。打开你的 pubspec.yaml
文件,并添加以下依赖:
dependencies:
flutter:
sdk: flutter
ha_firestore_scaffold: ^最新版本号 # 请替换为实际的最新版本号
然后运行 flutter pub get
以获取依赖。
接下来,配置 Firebase Firestore。你需要在 Firebase 控制台中为你的应用创建项目,并启用 Firestore 数据库。然后,将生成的 google-services.json
文件(对于 Android)和 GoogleService-Info.plist
文件(对于 iOS)放到你的 Flutter 项目中相应的位置。
以下是使用 ha_firestore_scaffold
的示例代码:
import 'package:flutter/material.dart';
import 'package:ha_firestore_scaffold/ha_firestore_scaffold.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Firestore Scaffold Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late Firestore firestore;
@override
void initState() {
super.initState();
firestore = FirebaseFirestore.instance;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firestore Scaffold Demo'),
),
body: FirestoreScaffold(
firestore: firestore,
collectionName: 'your_collection_name', // 替换为你的集合名称
documentIdFieldName: 'id', // 文档 ID 字段名称
documentSnapshotToWidget: (documentSnapshot) {
Map<String, dynamic> data = documentSnapshot.data()! as Map<String, dynamic>;
return ListTile(
title: Text(data['name']?.toString() ?? 'Unknown'),
subtitle: Text(data['description']?.toString() ?? ''),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () async {
await firestore.collection('your_collection_name').doc(documentSnapshot.id).delete();
},
),
);
},
floatingActionButton: FloatingActionButton(
onPressed: () async {
// 添加新文档
await firestore.collection('your_collection_name').add({
'name': 'New Item',
'description': 'This is a new item description',
});
},
tooltip: 'Add',
child: Icon(Icons.add),
),
),
);
}
}
在这个示例中:
FirestoreScaffold
是ha_firestore_scaffold
插件提供的一个组件,它接受几个参数来配置其行为。firestore
是 Firebase Firestore 的实例。collectionName
是你要查询的 Firestore 集合的名称。documentIdFieldName
是文档中存储 ID 的字段名称(通常可以省略,因为 Firestore 自动管理文档 ID)。documentSnapshotToWidget
是一个函数,它将DocumentSnapshot
转换为 Flutter Widget。在这个例子中,它简单地显示文档中的name
和description
字段。floatingActionButton
是一个浮动操作按钮,用于添加新文档到集合中。
请根据你的具体需求调整这个示例代码,比如更改集合名称、字段名称或者添加更多的字段到新文档中。