polkawallet_sdk.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. library polkawallet_sdk;
  2. import 'dart:async';
  3. import 'package:polkawallet_sdk/api/api.dart';
  4. import 'package:polkawallet_sdk/service/index.dart';
  5. import 'package:polkawallet_sdk/service/webViewRunner.dart';
  6. import 'package:polkawallet_sdk/storage/keyring.dart';
  7. /// SDK launchs a hidden webView to run polkadot.js/api for interacting
  8. /// with the substrate-based block-chain network.
  9. class WalletSDK {
  10. late PolkawalletApi api;
  11. late SubstrateService _service;
  12. /// webView instance, this is the only instance of FlutterWebViewPlugin
  13. /// in App, we need to get it and reuse in other sdk.
  14. WebViewRunner? get webView => _service.webView;
  15. /// param [jsCode] is customized js code of parachain,
  16. /// the api works without [jsCode] param in Kusama/Polkadot.
  17. Future<void> init(
  18. Keyring keyring, {
  19. WebViewRunner? webView,
  20. String? jsCode,
  21. }) async {
  22. final c = Completer();
  23. _service = SubstrateService();
  24. await _service.init(
  25. keyring,
  26. webViewParam: webView,
  27. jsCode: jsCode,
  28. onInitiated: () {
  29. // inject keyPairs after webView launched
  30. _service.keyring.injectKeyPairsToWebView(keyring);
  31. // and initiate pubKeyIconsMap
  32. api.keyring.updatePubKeyIconsMap(keyring);
  33. if (!c.isCompleted) {
  34. c.complete();
  35. }
  36. },
  37. );
  38. api = PolkawalletApi(_service);
  39. return c.future;
  40. }
  41. }