首页 文章

如何在扑动中使用 Google API?

提问于
浏览
9

我想在我的 Flutter 应用程序中使用 Google Cloud Natural Language,我得到Google API 包这适用于颤动,而_Google API_AUTH依赖适用于 0.2.1. 我该如何实现它们?

2 回答

  • 22

    这对我有用:

    使用包google_sign_in登录,然后从中获取 auth 标头:

    import 'package:google_sign_in/google_sign_in.dart'
        show GoogleSignIn, GoogleSignInAccount;
    
    import 'package:googleapis/people/v1.dart'
        show ListConnectionsResponse, PeopleApi;
    
    useGoogleApi() async {
      final _googleSignIn = new GoogleSignIn(
        scopes: [
          'email',
          'https://www.googleapis.com/auth/contacts.readonly',
        ],
      );
    
      await _googleSignIn.signIn();
    
      final authHeaders = _googleSignIn.currentUser.authHeaders;
      final httpClient = new GoogleHttpClient(authHeaders);
    
      data = await new PeopleApi(httpClient).people.connections.list(
          'people/me',
          personFields: 'names,addresses',
          pageToken: nextPageToken,
          pageSize: 100,
      );
    }
    

    这是一个自定义IOClient实现,可自动将 auth 标头添加到每个请求。 googleapis 调用支持传递要使用的自定义 HTTP 客户端而不是默认值(参见上文)

    import 'package:http/http.dart'
        show BaseRequest, IOClient, Response, StreamedResponse;
    
    class GoogleHttpClient extends IOClient {
      Map<String, String> _headers;
    
      GoogleHttpClient(this._headers) : super();
    
      @override
      Future<StreamedResponse> send(BaseRequest request) =>
          super.send(request..headers.addAll(_headers));
    
      @override
      Future<Response> head(Object url, {Map<String, String> headers}) =>
          super.head(url, headers: headers..addAll(_headers));
    
    }
    
  • 4

    我还无法添加评论,所以我只是将其作为评论发布。

    我一直试图按照最佳答案制作 GoogleHttpClient,但在导入时,它说“库'package:http/http.dart'不会导出显示名称'IOClient'的成员。”

    我在这里找到了答案https://pub.dartlang.org/packages/http#-changelog-tab-,它说你应该单独导入 IOClient:import 'package:http/io_client.dart';

    我认为这可能会帮助那些不知所措的人以及谷歌 API 的实施。

相关问题