Ich habe eine Wrapper-Klasse geschrieben, um mit der Javascripts-API auf Google Sheet zuzugreifen (da die Dart-Version von Google API nicht funktioniert). In der Callback-Funktion kann ich sehen, dass die Daten im body
und results
-Feld im Debugger auf Dartium gespeichert sind, aber von Dart nicht darauf zugreifen konnten. Jeder Vorschlag würde sehr geschätzt werden. Das Programm verwendet Dart 1.18.js-interop: Wie kann man auf die Eingangsdaten in der Callback-Funktion zugreifen?
Javascript-Code
var googleStorage = new GoogleStorage();
function GoogleStorage() {
this.CLIENT_ID = 'XXXXXXX';
this.SCOPES = ["https://www.googleapis.com/auth/spreadsheets.readonly"];
}
GoogleStorage.prototype.authorize = function(handleAuthResult) {
gapi.auth.authorize({
client_id: this.CLIENT_ID, scope: this.SCOPES, immediate: false
}, handleAuthResult);
return false;
}
GoogleStorage.prototype.loadTraitUrl = function(handleLoadUrlResult) {
console.log("loadConnectionUrl");
var discoveryUrl = 'https://sheets.googleapis.com/$discovery/rest?version=v4';
gapi.client.load(discoveryUrl).then(handleLoadUrlResult);
}
GoogleStorage.prototype.listTraits = function(successFunc, errorFunc) {
console.log("listData");
gapi.client.sheets.spreadsheets.values.get({
spreadsheetId: 'YYYYY',
range: 'Taits!B8:AQ',
}).then(successFunc, errorFunc);
}
Dart-Wrapper-Klasse
@JS()
library my_workbench.lib.common.google_storage;
import 'package:js/js.dart';
@JS('googleStorage')
class GoogleStorage {
external static authorize(Function handler);
external static traitLoadUrl(Function handler);
external static listTraits(Function success, Function error);
}
Dart Programm
main() async {
querySelector("#my_button").onClick.listen(handleEvent);
}
void handleEvent(MouseEvent event) {
print("Button Clicked");
GoogleStorage.authorize(
allowInterop((var authResult) {
handleAuthResult(authResult);
})
);
}
void handleAuthResult(var authResult) {
print("Successful Authenticated: ${authResult}");
GoogleStorage.traitLoadUrl(
allowInterop((_) {
handleLoadUrlResult();
})
);
}
void handleLoadUrlResult() {
print("Successful loaded URL");
GoogleStorage.listTraits(
allowInterop((var response) {
// var range = response.body;
print("Success: ${response.body}");
}), allowInterop((var response) {
print("Success: ${response}");
}));
}