如何在扑动中使用Google API?

Pri*_*xes 12 dart flutter

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

Gün*_*uer 26

这对我有用:

使用包登录,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;

  // custom IOClient from below
  final httpClient = GoogleHttpClient(authHeaders); 

  data = await PeopleApi(httpClient).people.connections.list(
      'people/me',
      personFields: 'names,addresses',
      pageToken: nextPageToken,
      pageSize: 100,
  );
}
Run Code Online (Sandbox Code Playgroud)

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

import 'package:http/io_client.dart';
import 'package:http/http.dart';

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));

}
Run Code Online (Sandbox Code Playgroud)

  • 现在可以使用/sf/ask/3505567691/使其正常工作。将来会尝试使用您的方法。 (2认同)
  • 我在上面的答案中发明了它;)这只是我用于“IOClient”的自定义子类的名称 (2认同)

Kim*_*lao 10

我还不能添加评论,所以我将其发布为答案。

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

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

我认为这可能会帮助那些刚起步的人及其Google API的实现。