Я написал класс оболочки для доступа к Листу Google, используя API javascripts (поскольку Dart версия Google API не работает). В функции обратного вызова я вижу, что данные хранятся в поле body
и results
в отладчике Dartium, но не могут получить к ним доступ из Dart. Любое предложение было бы очень оценено. Программа использует Dart 1.18.js-interop: Как получить доступ к входным данным в функции обратного вызова?
Javascript Код
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 Упаковочный Класс
@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 Программа
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}");
}));
}