Dart使用googleapis_auth包报错:AuthClient不是类型无法用作类型参数
报错原因
你导入package:googleapis_auth/auth_io.dart时使用了as auth的别名声明,但代码中所有来自该包的类型、方法都没有携带别名前缀,Dart编译器无法识别AuthClient等类型的来源,因此抛出该编译错误。
解决方案
提供两种可选修正方式:
方案1:保留导入别名,给所有相关成员加前缀
将代码中来自googleapis_auth的成员都加上auth.前缀,修正后的代码如下:
import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:googleapis_auth/auth_io.dart' as auth; class GmailButton extends StatelessWidget { GmailButton({Key? key}) : super(key: key); @override Widget build(BuildContext context){ return Container(); } // Obtain an access token // Use service account credentials to get an authenticated and auto refreshing client. Future<auth.AuthClient> obtainAuthenticatedClient() async { final accountCredentials = auth.ServiceAccountCredentials.fromJson({ "private_key_id": "<please fill in>", "private_key": "<please fill in>", "client_email": "<please fill in>@developer.gserviceaccount.com", "client_id": "<please fill in>.apps.googleusercontent.com", "type": "service_account" }); var scopes = ['https://mail.google.com']; auth.AuthClient client = await auth.clientViaServiceAccount(accountCredentials, scopes); return client; // Remember to close the client when you are finished with it. } // Send the email }
方案2:移除导入别名
将导入语句的as auth删除,直接使用包内导出的成员,原有业务代码无需改动:
// 仅修改导入声明即可 import 'package:googleapis_auth/auth_io.dart';
异常排查
修改完成后如果仍有编译异常,可执行以下命令清除缓存重新拉取依赖:
- 清理项目缓存:
flutter clean - 重新拉取依赖:
flutter pub get
内容的提问来源于stack exchange,提问作者samuelnihoul
相关产品推荐
相关产品推荐

