Использование js.dart для предоставления API auth0

Я пишу приложение Dart Angular2, но оно не имеет отношения к рассматриваемой проблеме.

Я пытаюсь использовать Auth0Lock с дротиком, выставляя его API, используя 1https://pub.dartlang.org/packages/js.

Я использую Dartium для отладки приложения.

поэтому я раскрываю API Auth0Lock, используя следующий файл auth0lock.dart:

import 'package:js/js.dart';

@JS()
class Auth0Lock {
 external factory Auth0Lock(String token, String domain, Object options);
  external on(String event, Function func);
  external show();
}

Я выставил только основные вещи, которые мне нужны.

Затем я создал сервис Angular2 в файле с именем auth0_service.dart который имеет следующий код:

импорт "пакет: angular2 / core.dart"; импорт 'auth0lock.dart'; импорт 'app.config.dart';

@Injectable()
class Auth {
Auth0Lock lock;

Auth() {
    this.lock = new Auth0Lock(configObj.auth0.apiKey, configObj.auth0.domain,{});
}
updateProfileName(data) {
  var profile = data['profile'] != null ? data['profile'] : data;
  print(profile['name']);
}

authenticated() {
  return false;
}

login() {
    this.lock.show().then(this.updateProfileName);
}


}

Я также покажу свой index.html куда я загружаю auth0:

<!DOCTYPE html>
<html>
<head>
    <title>Demo App</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <link rel="stylesheet" href="www/styles.css">
    <script src="https://cdn.auth0.com/js/lock/10.0.0/lock.min.js"></script>
    <script defer src="/web/main.dart" type="application/dart"></script>
    <script defer src="/packages/browser/dart.js"></script>
</head>
<body>
    <my-app></my-app>
</body>
</html>

когда я запускаю свое приложение, я получаю ошибку:

EXCEPTION: No static method 'Auth0Lock.' declared in class 'Auth0Lock'.

поэтому Auth0Lock не статический метод, это конструктор для класса. поэтому я должен как-то использовать API-интерфейс JS неправильно.

1 ответ

Решение

Мне нужно подготовиться к auth0lock.dart следующие:

@JS()
library test;

на самом деле я могу переименовать test ко всему, что я хочу... Мне просто нужно добавить тег JS и библиотеку с именем. это решило это.

Другие вопросы по тегам