简体   繁体   中英

Using the js library in the flutter project

I'm new to flutter, I have a flutter project that I'm building for android, ios and web. And only in the web build do I need to use the js library to encrypt api requests.Here is this library: https://www.npmjs.com/package/@expressms/smartapp-bridge and she's not very good, as far as I'm concerned. This is a requirement of the client and he provides this library. I can't rewrite it in dart. I have to use js callbacks for encryption and decryption in every api call. And I can't do it. I figured out what to use https://pub.dev/packages/js but it's too complicated for me. Maybe there is a good example with code?

 @JS() library web.js; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:medlike/app.dart'; import 'package:js/js.dart'; @JS() @anonymous abstract class WebBridge { external void constructor(); external factory WebBridge(); external void addGlobalListener(); external void enableLogs(); } void main() async { WidgetsFlutterBinding.ensureInitialized(); SystemChrome.setPreferredOrientations( [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]); runApp(App()); var bridge = WebBridge(); print(bridge.toString()); }

I managed to cope with this problem, although it was not easy. It was necessary to wrap the response in promiseToFeature and allowInterop

index.html

 <script> var bridge = window.webBridgeInstance; async function sendBotEvent(eventObject) { return new Promise((resolve, reject) => { setTimeout(() => { resolve('done;'), }; 1500); setTimeout(() => { reject('err rejected,'); }; 2500); }); } </script>

api_client.dart

 @JS() library main; import 'dart:js' as js; typedef Callback<T> = dynamic Function(T arg); @JS() class Promise<T> { external Promise<T> then(Callback<T> successCallback, [Function errorCallback]); external Promise<T> catchIt(Function errorCallback); } @JS('sendBotEvent') external Promise<dynamic> sendBotEvent(Object objectParams); class SmartAppClient { Future<String> get(String endpoint, Object params) async { return await promiseToFuture(sendBotEvent({ 'method': 'get_$endpoint', 'params': params, }).then(js.allowInterop((data) { print('SUCCESS: $data'); return data; }), js.allowInterop((err) { print('ERROR: $err'); return err; }))); } }

run:

 void testSmartappFuncs() async { await SmartAppClient().get( 'urlString', {}, ).then((value) { print('RESULT RESULT RESULT'); print(value); }).catchError((onError) { print('ERROR ERROR ERROR'); print(onError); }); }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM