Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 使用带省道/颤振的谷歌表单_Flutter_Dart_Google Sheets_Google Api - Fatal编程技术网

Flutter 使用带省道/颤振的谷歌表单

Flutter 使用带省道/颤振的谷歌表单,flutter,dart,google-sheets,google-api,Flutter,Dart,Google Sheets,Google Api,我正在试着写一个简单的飞镖程序。事实上,我正试图在一个更复杂的功能上加入一个功能,但由于我已经连续两天尝试了所有的东西,我开始失去理智,我会接受这个 理想情况下,我的代码将允许我从用户的个人谷歌工作表中选择一个电子表格,从中读取,创建一个新的工作表,并在其上写入一些信息 现在,如果有人能告诉我如何在用户的个人谷歌表单上创建一个电子表格,并在A1上写一个简单的值,我将永远欠那个人的债。它甚至不需要在屏幕上显示任何内容。创建那个该死的电子表格 我以前从未使用过谷歌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提出请求?您可以检查该方法并对其进行测试。