Flutter gRPC调用插件pkg_callgrpcrun的使用

Flutter gRPC调用插件pkg_callgrpcrun的使用

本文档将详细介绍如何在Flutter项目中使用pkg_callgrpcrun插件来调用gRPC服务。通过本指南,您可以快速上手并实现一个简单的gRPC客户端。


特性

  • 现代RPC框架pkg_callgrpcrun基于gRPC协议,支持高效远程过程调用。
  • 跨平台支持:可以在多种环境中运行,包括服务器、桌面和移动设备。
  • 简单易用:提供直观的API接口,方便开发者快速集成。

开始之前

确保您的开发环境已安装以下工具:

  • Flutter SDK(推荐版本:3.0及以上)
  • Dart SDK
  • 支持gRPC的服务器端服务

此外,确保您已经配置好gRPC服务的访问地址和认证信息。


使用步骤

1. 添加依赖

pubspec.yaml文件中添加pkg_callgrpcrun依赖:

dependencies:
  pkg_callgrpcrun: ^1.0.0

然后运行以下命令以更新依赖项:

flutter pub get

2. 初始化插件

在Flutter项目中导入插件,并初始化Cloudrun实例:

import 'package:pkg_callgrpcrun/pkg_callgrpcrun.dart';

void main() async {
  // 创建Cloudrun实例
  final callgrpc = Cloudrun();

  // 设置认证信息
  callgrpc.SECERT_JWT = 'ihavealongpassword'; // 替换为实际的JWT密钥
  callgrpc.R_USER = 'admin';                 // 替换为实际的用户名
  callgrpc.Uri = 'http://localhost:8080';    // 替换为实际的服务地址

  // 调用gRPC服务
  var pathRoute = "getData";                 // 替换为实际的路径
  var bodyData = {
    "phone": "+66885257777",
    "otpCode": "778747",
    "refCode": "orxh4f",
    "fromBU": "Qsms",
  };

  try {
    var response = await callgrpc.callgrpc(bodyData, pathRoute);
    print('Response: $response');
  } catch (e) {
    print('Error: ${e.toString()}');
  }
}

3. 解析响应数据

callgrpc方法返回的是JSON格式的数据,可以直接解析为Dart对象。例如:

var jsonResponse = jsonDecode(response);
print(jsonResponse['result']); // 输出结果字段

完整示例代码

以下是完整的代码示例,包含初始化、调用和解析响应的完整流程:

import 'dart:convert';
import 'package:pkg_callgrpcrun/pkg_callgrpcrun.dart';

void main() async {
  // 初始化Cloudrun实例
  final callgrpc = Cloudrun();

  // 设置认证信息
  callgrpc.SECERT_JWT = 'ihavealongpassword';
  callgrpc.R_USER = 'admin';
  callgrpc.Uri = 'http://localhost:8080';

  // 定义请求参数
  var pathRoute = "getData";
  var bodyData = {
    "phone": "+66885257777",
    "otpCode": "778747",
    "refCode": "orxh4f",
    "fromBU": "Qsms",
  };

  try {
    // 调用gRPC服务
    var response = await callgrpc.callgrpc(bodyData, pathRoute);

    // 解析JSON响应
    var jsonResponse = jsonDecode(response);
    print('Response: $jsonResponse');

    // 提取特定字段
    print('Result: ${jsonResponse['result']}');
  } catch (e) {
    // 捕获错误
    print('Error: ${e.toString()}');
  }
}

更多关于Flutter gRPC调用插件pkg_callgrpcrun的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


pkg_callgrpcrun 是一个用于在 Flutter 应用中方便地进行 gRPC 调用的插件。它简化了 gRPC 客户端的创建和调用过程,使得开发者可以更轻松地集成 gRPC 服务到 Flutter 应用中。

安装 pkg_callgrpcrun

首先,你需要在 pubspec.yaml 文件中添加 pkg_callgrpcrun 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  pkg_callgrpcrun: ^1.0.0  # 请使用最新的版本号

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

基本使用

1. 导入必要的库

在你的 Dart 文件中导入 pkg_callgrpcrun 插件:

import 'package:pkg_callgrpcrun/pkg_callgrpcrun.dart';

2. 创建 gRPC 客户端

使用 CallGrpcRun 类来创建 gRPC 客户端。你需要提供 gRPC 服务器的地址和端口:

final grpcClient = CallGrpcRun('https://your-grpc-server-address', 50051);

3. 调用 gRPC 方法

假设你有一个 gRPC 服务定义如下:

service MyService {
  rpc MyMethod (MyRequest) returns (MyResponse);
}

你可以使用 grpcClient.call 方法来调用这个服务:

final request = MyRequest()..someField = 'someValue';

try {
  final response = await grpcClient.call<MyResponse>(
    'MyService/MyMethod',
    request,
    (json) => MyResponse.fromJson(json),
  );
  print('Response: ${response.someField}');
} catch (e) {
  print('Error: $e');
}

4. 处理响应

grpcClient.call 方法返回一个 Future,你可以使用 await 来等待响应,并处理返回的数据。

高级用法

自定义 gRPC 调用选项

你可以通过传递 CallOptions 来自定义 gRPC 调用的选项,例如超时时间、认证信息等:

final response = await grpcClient.call<MyResponse>(
  'MyService/MyMethod',
  request,
  (json) => MyResponse.fromJson(json),
  options: CallOptions(timeout: Duration(seconds: 5)),
);

错误处理

grpcClient.call 方法会抛出异常,你可以使用 try-catch 来捕获和处理错误:

try {
  final response = await grpcClient.call<MyResponse>(
    'MyService/MyMethod',
    request,
    (json) => MyResponse.fromJson(json),
  );
  print('Response: ${response.someField}');
} catch (e) {
  print('Error: $e');
}

示例

以下是一个完整的示例,展示了如何使用 pkg_callgrpcrun 插件进行 gRPC 调用:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('gRPC Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              final grpcClient = CallGrpcRun('https://your-grpc-server-address', 50051);
              final request = MyRequest()..someField = 'someValue';

              try {
                final response = await grpcClient.call<MyResponse>(
                  'MyService/MyMethod',
                  request,
                  (json) => MyResponse.fromJson(json),
                );
                print('Response: ${response.someField}');
              } catch (e) {
                print('Error: $e');
              }
            },
            child: Text('Call gRPC'),
          ),
        ),
      ),
    );
  }
}

class MyRequest {
  String someField;

  Map<String, dynamic> toJson() => {'someField': someField};
}

class MyResponse {
  String someField;

  MyResponse.fromJson(Map<String, dynamic> json) : someField = json['someField'];
}
回到顶部