【发布时间】:2020-10-08 23:10:42
【问题描述】:
我尝试使用 google calendar api 检索事件
import 'package:googleapis_auth/auth_io.dart';
import 'package:http/http.dart' as http;
import 'package:googleapis/calendar/v3.dart' as calendarapi;
...
class _MyHomePageState extends State<MyHomePage> {
final accountCredentials = new ServiceAccountCredentials.fromJson(
{
"private_key_id": "562ab...",
"private_key": "-----BEGIN PRIVATE KEY--............----END PRIVATE KEY-----\n",
"client_email": "xxx@xxx.iam.gserviceaccount.com",
"client_id": "1073.......",
"type": "service_account",
"project_id": "myapi"
}
);
final scopes = [calendarapi.CalendarApi.CalendarScope];
final client = new http.Client();
void getCalendarEvents() {
clientViaServiceAccount(accountCredentials, scopes).then((client) {
var calendar = new calendarapi.CalendarApi(client);
var calEvents = calendar.events.list("primary");
calEvents.then((calendarapi.Events events) {
events.items.forEach((calendarapi.Event event) {print(event.summary);});
});
client.close();
});
}
}
...
@override
void initState() {
super.initState();
getCalendarEvents();
}
clientViaServiceAccount 行抛出异常
FormatException(FormatException:输入意外结束)
凭据应该没问题,因为我已经在不同的客户端中使用了它们。在提琴手中没有传出流量,因此即使在请求发送之前看起来也存在错误。代码有什么问题?
编辑
这是错误的堆栈
══╡ FLUTTER 测试框架════════════════════════════════ ═══════════════以下 运行测试时抛出 FormatException:输入意外结束
当异常被抛出时,这是堆栈: #0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1392:5) #1 _ChunkedJsonParser.close (dart:convert-patch/convert_patch.dart:510:7) #2 _JsonStringDecoderSink.close (dart:convert-patch/convert_patch.dart:1487:13) #3 _ConverterStreamEventSink.close (dart:convert/chunked_conversion.dart:80:18) #15 _StringAdapterSink.close (dart:convert/string_conversion.dart:249:11) #16 _Utf8ConversionSink.close (dart:convert/string_conversion.dart:300:20) #17 _ConverterStreamEventSink.close (dart:convert/chunked_conversion.dart:80:18) #46 AutomatedTestWidgetsFlutterBinding.pump。 (包:flutter_test/src/binding.dart:855:25) #49 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:69:41) #50 AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:840:27) #51 WidgetTester.pumpWidget。 (包:flutter_test/src/widget_tester.dart:318:22) #54 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:69:41) #55 WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:315:27) #56主要。 (file:///C:/projekte/flutter_garden/flutter_garden/test/widget_test.dart:9:18) #58主要。 (file:///C:/projekte/flutter_garden/flutter_garden/test/widget_test.dart:7:43) #59 testWidgets..(包:flutter_test/src/widget_tester.dart:119:25) #61 testWidgets..(包:flutter_test/src/widget_tester.dart:117:9) #62 TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:648:19) #76 AutomatedTestWidgetsFlutterBinding.runTest。 (包:flutter_test/src/binding.dart:1032:17) #78 AutomatedTestWidgetsFlutterBinding.runTest。 (包:flutter_test/src/binding.dart:1020:35)(省略了 74 帧 _FakeAsync 类、dart:async 包、dart:async-patch 包和 包堆栈跟踪)
【问题讨论】:
-
我不知道你是否复制了整个代码,但我马上可以看到,在交互后客户端没有右括号`_MyHomePageState
, you might want to check on that. If I understood correctly your code is not even executing? Or is the error part of the client getting to the google server. I would say that you already did but if not read [the following page](https://github.com/dart-lang/googleapis_auth), in there is recommended toclose`。 -
我更新了代码。 client.close() 没有改变结果。 getCalendarEvents 在 initState 中调用
-
但是您的代码是否还在执行/编译?你有没有办法检查你是否向谷歌服务器发出请求?
-
是的,我通过颤振单元测试运行代码,它正在点击 getCalendarEvents -> clientViaServiceAccount
标签: flutter oauth-2.0 google-api google-calendar-api