🤷🏻‍♀️ Flutter

🐐 Flutter gRPC 통신

1. pubspec.yaml에 grpc 추가

flutter: 3.10
dependencies:
  grpc: ^3.2.2
  protobuf: ^3.0.0
  protoc_plugin: ^21.0.2

2. proto 파일 생성

syntax = "proto3";

option java_multiple_files = true;
option java_outer_classname = "EventProto";
option java_package = "com.inspect";

package inspect;

import "google/protobuf/timestamp.proto";

service Greeter {
  rpc GetPart (PartRequest) returns (PartReply) {}
  rpc UpdateInspect (InspectRequest) returns (InspectReply) {}
  rpc GetInspect (InspectListRequest) returns (InspectListReply) {}

}
message GrpcDecimal {
  int64 units = 1;
  sfixed32 nanos = 2;
}

message PartRequest {
  string partCodeX = 1;
}

message PartReply {
  string partName = 1;
  string partSpec = 2;
}

message InspectRequest {
  string barCode = 1;
  google.protobuf.Timestamp scanTime = 2;
}

message InspectReply {
  string message = 1;
}

message InspectListRequest {
  google.protobuf.Timestamp inspectDate = 1;
}

message InspectListReply {
  string inspectJson = 1;
}

3. plugin 설치 및 경로 업데이트

  • 꼭 경로 업데이트를 해야한다. 안할경우 에러가 난다.
    pub global activate protoc_plugin
    
# linux
$ export PATH="$PATH:$HOME/.pub-cache/bin"

#windows - powershell
$env:PATH += ";$env:USERPROFILE/.pub-cache/bin"

3-1 경로 업데이트를 안할경우

pub global run protoc_plugin:protoc --dart_out=grpc:lib/src/generated -I=lib/protos lib/protos/*.proto

4. proto 파일을 dart 파일로 변환

protoc -I=lib/protos --dart_out=lib/src/generated 
4-1. protoc_plugin 버전이 낮아서 에러가 난다면
protoc -I=lib/protos --dart_out=grpc:lib/src/generated 
  • pbgrpc.dart 파일이 생성이 안되는 경우 grpc: 옵션을 추가해준다.
4-2. timestamp.proto 파일이 없다고 에러난다
import 'google/protobuf/timestamp.pb.dart' as $0; // timestamp.pb.dart 파일이 없다고 에러가 난다.

이럴경우에는 timestamp.proto 파일을 다운받아서 lib/protos에 넣어주면 된다.

실제로 generated 폴더에 lib/protos 폴더에 다운받아서 넣어놓고선

protoc -I=lib/protos --dart_out=lib/src/generated /lib/protos/*

를 실행하기도 하지만 다운받아 놓은 timestamp.proto가 없을경우

protoc -I=lib/protos --dart_out=lib/src/generated google/protobuf/timestamp.proto 

이렇게 진행해도 된다.

진행하고나면 lib/src/generated 폴더에 google/protobuf 폴더가 생성되며 timestamp.pb.dart 파일이 생성된다.

4. gRPC 통신

import 'package:grpc/grpc.dart';

import 'package:grpc_test/src/generated/event.pbgrpc.dart';


Note: 만들고나니 내것이 아니었다.

Leave a comment