Flutter网络通信插件firedart的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter网络通信插件firedart的使用

Firedart 🔥🎯 是一个基于Dart原生实现的Firebase Auth和Firestore SDK。它旨在最小化依赖,以便能够在任何可以执行Dart代码的环境中运行。目前,它已经在Dart运行时(x86-64arm32)以及Flutter Android、iOS和桌面端成功测试。

依赖配置

在你的pubspec.yaml文件中添加Firedart:

dependencies:
  firedart: [latest version]

Firebase Auth 使用

FirebaseAuth类实现了管理账户所需的功能,当前仅支持Email/Password匿名登录方式,请确保在Firebase控制台中启用这些登录方式。

你需要去Firebase Console,打开项目设置,在常规选项卡下复制Web API Key

示例代码

import 'package:firedart/firedart.dart';

// 初始化FirebaseAuth,并传入API key和token存储实例
FirebaseAuth.initialize(apiKey, await HiveStore.create());

// 登录
await FirebaseAuth.instance.signIn(email, password);

// 获取用户信息
var user = await FirebaseAuth.instance.getUser();
print(user);

或者你可以创建自己的FirebaseAuth对象:

var firebaseAuth = FirebaseAuth(apiKey, await PreferencesStore());
await firebaseAuth.signIn(email, password);
var user = await firebaseAuth.getUser();

更多用法示例可以在firedart集成测试中找到。

Firestore 使用

Firestore类是服务RPC接口的基本实现。API与官方SDK相似(但不完全相同)。

示例代码

import 'package:firedart/firedart.dart';

const apiKey = 'Project Settings -> General -> Web API Key';
const projectId = 'Project Settings -> General -> Project ID';
const email = 'you@server.com';
const password = '1234';

Future main() async {
  // 初始化FirebaseAuth
  FirebaseAuth.initialize(apiKey, VolatileStore());
  
  // 初始化Firestore
  Firestore.initialize(projectId); // Firestore重用auth client

  var auth = FirebaseAuth.instance;
  // 监控登录状态
  auth.signInState.listen((state) => print("Signed ${state ? "in" : "out"}"));

  // 使用用户凭证登录
  await auth.signIn(email, password);

  // 获取用户对象
  var user = await auth.getUser();
  print(user);

  // 实例化文档引用 - 这是在离线状态下发生的
  var ref = Firestore.instance.collection('test').document('doc');

  // 订阅该文档的变化
  final subscription =
      ref.stream.listen((document) => print('updated: $document'));

  // 更新文档
  await ref.update({'value': 'test'});

  // 获取文档快照
  var document = await ref.get();
  print('snapshot: ${document['value']}');

  await subscription.cancel();
  auth.signOut();
  auth.close();

  // 允许一些时间来获取登出事件
  await Future.delayed(Duration(milliseconds: 100));

  Firestore.instance.close();
}

注意事项

  • 集合查询(如限制、排序等)当前不受支持。
  • 数据不会本地缓存。
  • 失败的写操作(例如由于网络错误)不会重试。
  • 关闭的流不会自动恢复。

以上就是关于Flutter网络通信插件firedart的使用介绍,希望对您有所帮助!


更多关于Flutter网络通信插件firedart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络通信插件firedart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用firedart插件进行网络通信的示例。firedart是一个用于HTTP客户端请求的Flutter插件,它基于Dart的http库,并提供了更高级的抽象和易用性。

首先,确保你的Flutter项目已经创建并初始化。然后,在你的pubspec.yaml文件中添加firedart依赖:

dependencies:
  flutter:
    sdk: flutter
  firedart: ^x.y.z  # 替换为最新版本号

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

接下来,你可以在你的Dart代码中使用firedart进行HTTP请求。以下是一个简单的示例,展示了如何使用firedart进行GET和POST请求:

import 'package:flutter/material.dart';
import 'package:firedart/firedart.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firedart Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  String response = await performGetRequest();
                  // 处理响应
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('GET Response: $response')),
                  );
                },
                child: Text('Perform GET Request'),
              ),
              ElevatedButton(
                onPressed: () async {
                  String response = await performPostRequest();
                  // 处理响应
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('POST Response: $response')),
                  );
                },
                child: Text('Perform POST Request'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<String> performGetRequest() async {
    var client = HttpClient();
    var request = Request.get('https://jsonplaceholder.typicode.com/posts/1');

    try {
      var response = await client.send(request);
      if (response.statusCode == 200) {
        var body = await response.body.decodeString();
        return body; // 这里返回的是JSON字符串
      } else {
        throw Exception('Failed to fetch data: ${response.statusCode}');
      }
    } catch (e) {
      return 'Error: ${e.toString()}';
    } finally {
      client.close();
    }
  }

  Future<String> performPostRequest() async {
    var client = HttpClient();
    var body = '{ "title": "foo", "body": "bar", "userId": 1 }';
    var request = Request.post(
      'https://jsonplaceholder.typicode.com/posts',
      body: Body.json(body),
    );

    try {
      var response = await client.send(request);
      if (response.statusCode == 201) {
        var body = await response.body.decodeString();
        return body; // 这里返回的是JSON字符串
      } else {
        throw Exception('Failed to post data: ${response.statusCode}');
      }
    } catch (e) {
      return 'Error: ${e.toString()}';
    } finally {
      client.close();
    }
  }
}

注意:上述代码是基于firedartHttpClient进行的基本HTTP请求。然而,firedart的API可能与示例中的直接使用HttpClient有所不同,因为firedart可能提供了更高层次的抽象。如果firedart提供了自己的封装,你应该参考其官方文档来调整代码。

由于firedart的具体API可能会随时间变化,我建议你查看其GitHub仓库Pub.dev页面(如果它存在的话)以获取最新的使用指南和API文档。

如果你发现firedart并没有提供预期的封装,或者它不是一个有效的Flutter插件,你可能需要考虑使用其他流行的HTTP客户端库,如diohttp包。这些库在Flutter社区中非常受欢迎,并且有丰富的文档和示例。

回到顶部