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 的集合,并获取每个文档的 idbody 字段:

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

1 回复

更多关于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}');
  },
);
回到顶部