Flutter 使用带省道/颤振的谷歌表单
我正在试着写一个简单的飞镖程序。事实上,我正试图在一个更复杂的功能上加入一个功能,但由于我已经连续两天尝试了所有的东西,我开始失去理智,我会接受这个 理想情况下,我的代码将允许我从用户的个人谷歌工作表中选择一个电子表格,从中读取,创建一个新的工作表,并在其上写入一些信息 现在,如果有人能告诉我如何在用户的个人谷歌表单上创建一个电子表格,并在A1上写一个简单的值,我将永远欠那个人的债。它甚至不需要在屏幕上显示任何内容。创建那个该死的电子表格 我以前从未使用过谷歌API,所以我可能做错了什么,但我找不到它是什么Flutter 使用带省道/颤振的谷歌表单,flutter,dart,google-sheets,google-api,Flutter,Dart,Google Sheets,Google Api,我正在试着写一个简单的飞镖程序。事实上,我正试图在一个更复杂的功能上加入一个功能,但由于我已经连续两天尝试了所有的东西,我开始失去理智,我会接受这个 理想情况下,我的代码将允许我从用户的个人谷歌工作表中选择一个电子表格,从中读取,创建一个新的工作表,并在其上写入一些信息 现在,如果有人能告诉我如何在用户的个人谷歌表单上创建一个电子表格,并在A1上写一个简单的值,我将永远欠那个人的债。它甚至不需要在屏幕上显示任何内容。创建那个该死的电子表格 我以前从未使用过谷歌API,所以我可能做错了什么,但我找
- 我想读/写用户的个人工作表。所以我使用的是来自Google开发者控制台的客户端ID OAuth 2.0
- 我已经尝试了我能在这里找到的一切,我开始放弃,这就是我要求解决的原因。一个简单的解决方案。我可以这样做,但是说“你应该使用XX软件包”的帖子并没有帮我解决这个问题
import 'package:googleapis/sheets/v4.dart';
import "package:googleapis_auth/auth_io.dart" as auth;
void main() {
var id = auth.ClientId(
"...myID....apps.googleusercontent.com",
"...");
var scopes = ["https://www.googleapis.com/auth/spreadsheets"];
auth.clientViaUserConsent(id, scopes, prompt).then((auth.AuthClient client) {
SheetsApi api = SheetsApi(client);
//Here I'd do things, if I could
client.close();
});
}
void prompt(String url) {
print("Please go to the following URL and grant access:");
print(" => $url");
print("");
}
我转到URL并授予访问权限,但随后我被重定向到本地主机您只需向
https://sheets.googleapis.com/v4/spreadsheets
endpoint具有电子表格的JSON表示形式,例如:
{
"spreadsheetId": string,
"properties": {
object (SpreadsheetProperties)
},
"sheets": [
{
object (Sheet)
}
],
"namedRanges": [
{
object (NamedRange)
}
],
"spreadsheetUrl": string,
"developerMetadata": [
{
object (DeveloperMetadata)
}
]
}
你可以从官方网站上获得更多信息
如果你想开始在一个有电子表格操作的项目中工作,必须使用软件包。此代码验证用户身份,创建一个名为“hello_Spreadsheet”的谷歌电子表格,并将一些数据写入电子表格的第一行。验证Firebase的代码已注释掉
//import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:googleapis/drive/v3.dart' as drive;
import 'package:http/http.dart' as http;
import 'package:googleapis/sheets/v4.dart' as sheets;
myGoogleSheet() async {
var authenticateClient = await signInWithGoogle();
var sheetID = await createSpreadSheet(authenticateClient);
writeToSheet(authenticateClient, sheetID);
}
Future signInWithGoogle() async {
final GoogleSignInAccount googleUser = await GoogleSignIn(scopes: [
'https://www.googleapis.com/auth/drive',
]).signIn();
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
//final GoogleAuthCredential credential = GoogleAuthProvider.credential(
// accessToken: googleAuth.accessToken,
// idToken: googleAuth.idToken,
//);
//var auth = FirebaseAuth.instance;
//await auth.signInWithCredential(credential);
final authHeaders = await googleUser.authHeaders;
final authenticateClient = GoogleAuthClient(authHeaders);
return authenticateClient;
}
Future createSpreadSheet(GoogleAuthClient authenticateClient) async {
final driveApi = drive.DriveApi(authenticateClient);
var driveFile = new drive.File();
driveFile.name = "hello_spreadsheet";
driveFile.mimeType = 'application/vnd.google-apps.spreadsheet';
final result = await driveApi.files.create(driveFile);
return result.id;
}
writeToSheet(GoogleAuthClient authenticateClient, String sheetID) {
final sheetsApi = sheets.SheetsApi(authenticateClient);
sheets.ValueRange vr = new sheets.ValueRange.fromJson({
"values": [
["2021/04/05", "via API", "5", "3", "3", "3", "3", "3", "3", "3"]
]
});
sheetsApi.spreadsheets.values.append(vr, sheetID, 'A:J', valueInputOption: 'USER_ENTERED').then((sheets.AppendValuesResponse r) {
print('append completed');
});
}
class GoogleAuthClient extends http.BaseClient {
final Map _headers;
final http.Client _client = new http.Client();
GoogleAuthClient(this._headers);
Future send(http.BaseRequest request) {
return _client.send(request..headers.addAll(_headers));
}
}
你能从你的一次尝试中添加代码吗?当然。我已经编辑了我以前的帖子,这是一段我不知道如何与我的帖子混合的代码。您可以进一步详细说明吗?您不需要其他任何东西,您有一个端点和一个请求主体。你在找什么?你有没有试着按照文档先创建电子表格?在它里面,你不真正理解的部分是什么?授权?用dart提出请求?您可以检查该方法并对其进行测试。