Я пытаюсь создать реализацию дротика API-интерфейса auth0 с помощью пакета js от https://pub.dartlang.org/packages/js.преобразование объекта javascript, возвращаемого из javascript API, в класс дротика
так я загружаю https://cdn.auth0.com/js/lock/10.0.0/lock.min.js в index.html, и я создал следующий класс auth0lock дротика:
@JS()
library auth0lock;
import 'package:js/js.dart';
@JS('Auth0Lock')
class Auth0LockJS {
external factory Auth0LockJS(String token, String domain, Object options);
external on(String event, Function func);
external show();
}
class Auth0Lock {
Auth0LockJS auth0;
Auth0Lock(String token, String domain, Object options) {
this.auth0 = new Auth0LockJS(token,domain,options);
}
on(String event, Function func) {
this.auth0.on(event,allowInterop(func));
}
show() {
this.auth0.show();
}
}
@anonymous
@JS()
class AuthResult {
external factory AuthResult({
String accessToken,
String idToken,
String idTokenPayload,
String state
});
external String get accessToken;
external set accessToken(String v);
external String get idToken;
external set idToken(String v);
external Object get idTokenPayload;
external set idTokenPayload(Object v);
external String get state;
external set state(String v);
}
Я пишу приложение angular2-дротик, так что я создал службу аутентификации, которая использует auth0lock.dart
файл, который я ранее показывал, используя следующий код:
@Injectable()
class Auth {
Auth0Lock lock;
authenticatedEvent(AuthResult authResult) {
print(authResult);
}
Auth() {
this.lock = new Auth0Lock(configObj.auth0.apiKey, configObj.auth0.domain,{});
this.lock.on("authenticated", authenticatedEvent);
}
updateProfileName(data) {
var profile = data['profile'] != null ? data['profile'] : data;
print(profile['name']);
}
authenticated() {
return false;
}
login() {
this.lock.show();
}
}
сейчас ... все на самом деле работает! Я создал в файле auth_service.dart
переменную с именем AuthLock
по имени lock
. Я экземпляр с параметрами, запустите функцию show()
, подключитесь к событию authenticated
, и функция запущена с завершением аутентификации.
Я создал класс AuthResult, но он игнорирует его, и я получаю объект javascript, возвращенный из обработчика функции.
Я программирую код с помощью Intellij и выполняю действия с dartium. поэтому, когда я помещаю точку останова на строку print(authResult);
в файле auth_service.dart
, отладчик показывает, что объект authResult содержит 2 свойства, JavaScript View
типа Object
и class
типа JSObjectimpl
. Javascript View
содержит все свойства, возвращаемые этим обработчиком.
Как его преобразовать в обычный класс в дротике? очевидно, что я создал класс AuthResult неправильно, потому что обработчик функции не возвращает этот тип. так что мне не хватает?
спасибо!
обновление
внутри authenticatedEvent
функции Я пытался печати authResult.values
, который произвел ошибку, что класс типа JSObjectImpl не имеет такой функции. поэтому возвращаемым объектом является тип JSObjectImpl
. странно то, что я понятия не имею, где JSObjectImpl
определяется так что я удалил переменную типа authResult
и попытался использовать переменные внутри каталога с помощью следующего кода:
authenticatedEvent(authResult) {
var a = authResult.accessToken;
print(a);
}
это работает. почему я не могу найти JSObjectImpl
типа в дротике? любой быстрый способ преобразовать это в класс дротика?
благодаря
Hi. Спасибо за вашу помощь.к сожалению, удаление @anonymous тега не решает проблему. AuthResult, который я получаю, является объектом json, а не классом. Мне интересно, как преобразовать его в класс дротика. – ufk
В моем примере то, что передано 'Apple', также выглядит как объект JS при печати, но может использоваться как класс Dart. Я не думаю, что есть способ создать настоящий класс Дарт. Все, что вы получаете, - это прокси-сервер, который позволяет вам получать доступ к свойствам и методам, таким как класс Dart. –