Flutter集成gRPC

Flutter集成gRPC

1、安装Flutter(会自动安装Dart的),这里就不再多说了,不清楚的看这里:https://flutterchina.club/get-started/install/

2、插件,我这里就以IDEA为例

首先装Flutter
在这里插入图片描述
我这里装过了,就没截Flutter安装的图
在这里插入图片描述
然后就是就是装protobuf support,一样的,搜索的内容换一下就好了

3、配置环境变量

export PATH=$HOME/flutter/bin:$HOME/flutter/bin/cache/dart-sdk/bin:$HOME/.pub-cache/bin:$PATH

这里解释一下,/flutter/bin主要是为protoc配置的。/flutter/bin/cache/dart-sdk/bin主要是为pub配置的,这个不配置pub命令是找不到的,如果你是手动安装的dart-sdk那么这个目录是要自己调整的,到dart-sdk下的bin目录就好了,装flutter自动装dart是在这个目录的。/.pub-cache/bin主要是为了protoc-gen-dart配置的,这个主要是proto文件编译dart文件的编译器,这个现在是没有的,等下执行了pub就会生成这个目录,也可以生成之后再配置。

4、安装Dart的protoc插件

pub global activate protoc_plugin

我就要卡在这半天,这个pub命令找不到,是因为没有配置dart-sdk/bin的环境变量,pub是在dart-sdk里的。

5、创建Flutter项目,新建proto文件。

Flutter项目创建就不说了,创建的时候选择Flutter项目就好了。
.proto文件

syntax = "proto3";

//生成多文件
option java_multiple_files = true;
//包名
option java_package = "io.grpc.examples.MyAttention";

//定义MyAttentionRequest消息类型,用于客户端消息
message MyAttentionRequest{
 	string workId = 1;
	int32 page = 2;
	int32 number = 3;
}

//定义MyAttentionResponse消息类型,用于服务端消息返回
message MyAttentionResponse{
   	 repeated SeniorInfo seniorInfo = 1;// 复杂的对象List
	int32 allNumber = 2;
}
//对象senior
message SeniorInfo{
	int64 seniorId = 1;
	string name = 2;
	string gender = 3;
	int64 age = 4;
	string address = 5;
}
// 定义服务
service MyAttentionService {
	// 服务中的方法,传过来一个MyAttentionRequest类型的对象,返回一个MyAttentionResponse类型的对象
	rpc communication(MyAttentionRequest) returns (MyAttentionResponse) {}
}

5、编译生成dart代码

1、手动敲

protoc --dart_out=grpc:lib/generated -Iprotos protos/helloworld.proto

这里是指cd到了当前项目或者直接用IEDA的Terminal去敲这个命令,不然找不到的。lib/generated这个目录是要你自己生成的,不然会找不到目录的,-Iprotos后面是目录/文件全称。

2、脚本

我这里用的是make,脚本就是省心多了,不用管,直接运行就好,直接编译,直接运行make就好了

PROTO_ROOT_DIR = $(shell brew --prefix)/Cellar/protobuf/3.7.0/include
VERSION=0.1.0

default: clean stubs

## Dart requires you to manually ship all google provided proto files too.
stubs:
	mkdir -p lib/generated
	protoc -I=protos --dart_out=grpc:lib/generated protos/*.proto
	protoc -I$(PROTO_ROOT_DIR) --dart_out=lib/generated $(PROTO_ROOT_DIR)/google/protobuf/*.proto

clean:
	rm -rf build lib/generated

run-local:
	dart bin/server.dart

build-docker:
	docker build -t pambrose/flutter_module:${VERSION} .

run-docker:
	docker run -p 50051:50051 pambrose/flutter_module:${VERSION}

push-docker:
	docker push pambrose/flutter_module:${VERSION}

运行后我们再看看项目就生成了client需要的dart文件
在这里插入图片描述

6、Flutter配置

grpc:^0.6.6
protobuf: ^0.13.4

再packages get一下,然后你会发现你自动生成的.pbgrpc.dart报错了
在这里插入图片描述
然后你看看包就知道了
在这里插入图片描述
压根就没有service_api.dart之个文件,不过没关系,跑到grpc.dart里面一看,他导了所有grpc库,然后就把service_api.dart换成grpc.dart就行了,这个估计是编译器与grpc版本不一致导致的。现在就可以开始写Flutter Client代码了;

关于Flutter Grpc Client连接管理,有兴趣的可以看一下。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值