Flutter图形绘制与可视化插件firegraph的使用
Firegraph 是一个插件,它允许您通过 GraphQL 查询 Firestore 数据库。本文将介绍如何安装和使用 Firegraph 插件。
开始使用
使用 Firegraph 非常简单,只需安装并开始使用!
安装
要从 pub 获取包,请在您的项目目录中运行以下命令:
flutter pub add firegraph
您也可以直接在 pubspec.yaml
文件中包含该包,如下所示:
dependencies:
firegraph: ^1.0.0
然后运行 flutter pub get
来获取依赖项。
使用
要使用 Firegraph,您需要在文件中导入以下内容:
import 'package:firegraph/firegraph.dart';
查询
查询集合
集合可以像 GraphQL 类型查询一样被查询。例如,查询名为 posts
的集合,并获取每个文档的 id
和 body
字段:
Map posts = await Firegraph.resolve(FirebaseFirestore.instance, r'''
query{
posts{
id
body
}
}
''');
查询子集合
子集合可以被视为父类型内的一个类型。例如,查询 posts
集合中某个文档的子集合 comments
(层次结构为 posts/doc/comments/doc
):
Map posts = await Firegraph.resolve(FirebaseFirestore.instance, r'''
query{
posts{
id
body
comments{
id
message
}
}
}
''');
这种方式可以让您尽可能深入地查询子集合。
查询引用文档
DocumentReference
字段或保存文档路径的字符串字段可以作为原始文档的子级进行查询。
例如,posts
集合中的文档持有指向 users
集合中文档的 author
引用,可以按以下方式查询:
Map posts = await Firegraph.resolve(FirebaseFirestore.instance, r'''
query{
posts{
id
body
author{
id
name
age
}
}
}
''');
对于保存文档路径的字符串字段,同样可以这样做。此外,还可以通过 path
参数提供父级路径。例如:
Map posts = await Firegraph.resolve(FirebaseFirestore.instance, r'''
query{
posts{
id
body
authorId(path:"users/"){
id
name
age
}
}
}
''');
更多关于集合、子集合和文档的查询示例,请查看 firegraph 示例。
别名
我们支持与 GraphQL 相同的别名结构。例如:
Map posts = await Firegraph.resolve(FirebaseFirestore.instance, r'''
query{
articles: posts{
id
articleBody: body
writer: author{
id
name
age
}
}
}
''');
过滤查询
可以通过 Firebase 的 where
查询来过滤文档。我们支持 Firebase 的所有 where
查询作为 GraphQL 的 where
参数。
例如,如果要查询年龄大于 30 的所有用户,需要在 where
过滤器中使用 key_gt
(大于)后缀。示例查询如下:
Map users = await Firegraph.resolve(FirebaseFirestore.instance, r'''
query{
users(where:{
age_gt: 30
}){
id
name
age
}
}
''');
对于任何 key
,其后缀决定了操作符。以下是支持的所有过滤器及其后缀列表:
Where 操作符 | 后缀 | 接受值 |
---|---|---|
.where(key, isEqualTo: value) |
key_eq: value |
任意值 |
.where(key, isNotEqualTo: value) |
key_neq: value |
任意值 |
.where(key, isGreaterThan: value) |
key_gt: value |
任意值 |
.where(key, isGreaterThanOrEqualTo: value) |
key_gte: value |
任意值 |
.where(key, isLessThan: value) |
key_lt: value |
任意值 |
.where(key, isLessThanOrEqualTo: value) |
key_lte: value |
任意值 |
.where(key, isNull: value) |
key_null: value |
布尔值 |
.where(key, arrayContains: value) |
key_contains: value |
任意值 |
.where(key, arrayContainsAny: value) |
key_containsAny: value |
列表 |
.where(key, whereIn: value) |
key_in: value |
列表 |
.where(key, whereNotIn: value) |
key_notIn: value |
列表 |
这些过滤器可以应用于任何集合或子集合查询,无论嵌套多深!更多参考请查看 firegraph 示例。
注意:某些查询需要在 Firebase 项目中预先创建索引。要在 Firebase 项目中创建或查看索引,请访问 此链接。
排序查询
可以通过 Firebase 的 orderBy
查询对文档进行排序。您可以提供一个对象类型的 orderBy
参数,定义您想要排序的字段及其顺序(升序或降序)。
例如,如果要按用户的年龄升序查询用户,您的查询看起来像这样:
Map users = await Firegraph.resolve(FirebaseFirestore.instance, r'''
query{
users(orderBy:{
age: "asc"
}){
id
name
age
}
}
''');
更多参考请查看 firegraph 示例。
分页查询
要限制集合或子集合查询的文档数量,可以提供 limit
参数。
例如,仅查询 10 个用户:
Map users = await Firegraph.resolve(FirebaseFirestore.instance, r'''
query{
users(limit: 10){
id
name
age
}
}
''');
缓存
Firegraph 实现了一个简单的缓存机制,存储通过集合和子集合查询到的所有引用文档,并为显式引用的文档提供缓存优势(即通过引用查询的文档)。
注意:每个查询都有独立的缓存。
贡献
感谢您的兴趣!欢迎您提交问题和拉取请求。您也可以在 Twitter 上联系我:@taosif7。
示例代码
以下是完整的示例代码,展示如何使用 Firegraph 查询集合、子集合和过滤条件:
import 'package:flutter/material.dart';
import 'package:firegraph/firegraph.dart';
void main() async {
// 初始化 Firebase
await Firebase.initializeApp();
// 查询 posts 集合
Map posts = await Firegraph.resolve(FirebaseFirestore.instance, r'''
query{
posts{
id
body
comments{
id
message
}
}
}
''');
print(posts);
}
更多关于Flutter图形绘制与可视化插件firegraph的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图形绘制与可视化插件firegraph的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
firegraph
是一个用于 Flutter 的图形绘制与可视化插件,主要用于绘制各种类型的图表,如折线图、柱状图、饼图等。它提供了丰富的自定义选项,使开发者能够轻松创建符合需求的图表。
以下是如何在 Flutter 项目中使用 firegraph
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 firegraph
依赖:
dependencies:
flutter:
sdk: flutter
firegraph: ^0.1.0 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 基本使用
firegraph
提供了多种图表类型,以下是一个简单的折线图示例:
import 'package:flutter/material.dart';
import 'package:firegraph/firegraph.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('FireGraph Example'),
),
body: Center(
child: FireGraph(
type: GraphType.LINE,
data: [
FireGraphData(value: 10, label: 'Jan'),
FireGraphData(value: 20, label: 'Feb'),
FireGraphData(value: 30, label: 'Mar'),
FireGraphData(value: 40, label: 'Apr'),
FireGraphData(value: 50, label: 'May'),
],
),
),
),
);
}
}
3. 自定义图表
firegraph
提供了多种自定义选项,例如颜色、标签、动画等。以下是一个自定义柱状图的示例:
import 'package:flutter/material.dart';
import 'package:firegraph/firegraph.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('FireGraph Custom Example'),
),
body: Center(
child: FireGraph(
type: GraphType.BAR,
data: [
FireGraphData(value: 10, label: 'Jan'),
FireGraphData(value: 20, label: 'Feb'),
FireGraphData(value: 30, label: 'Mar'),
FireGraphData(value: 40, label: 'Apr'),
FireGraphData(value: 50, label: 'May'),
],
options: FireGraphOptions(
barColor: Colors.blue,
labelColor: Colors.black,
showLabel: true,
animationDuration: Duration(seconds: 1),
),
),
),
),
);
}
}
4. 更多图表类型
firegraph
支持多种图表类型,包括:
GraphType.LINE
: 折线图GraphType.BAR
: 柱状图GraphType.PIE
: 饼图GraphType.DONUT
: 环形图
你可以通过设置 type
属性来切换图表类型。
5. 处理交互
firegraph
还支持图表交互,例如点击事件。你可以通过 onDataPointTap
回调来处理用户点击数据点的事件:
FireGraph(
type: GraphType.LINE,
data: [
FireGraphData(value: 10, label: 'Jan'),
FireGraphData(value: 20, label: 'Feb'),
FireGraphData(value: 30, label: 'Mar'),
FireGraphData(value: 40, label: 'Apr'),
FireGraphData(value: 50, label: 'May'),
],
onDataPointTap: (FireGraphData data) {
print('Tapped on ${data.label} with value ${data.value}');
},
);