77import 'dart:io' ;
88
99import 'package:fair/fair.dart' ;
10- import 'package:fair/src/internal/bind_data.dart' ;
11- import 'package:fair/src/render/builder.dart' ;
12- import 'package:fair/src/render/proxy.dart' ;
10+ import 'package:fair/src/internal/global_state.dart' ;
1311import 'package:flutter/foundation.dart' ;
1412import 'package:flutter/material.dart' ;
15- import 'package:flutter/services.dart' ;
1613
1714import 'internal/flexbuffer/fair_js_decoder_http_decoder.dart' ;
1815import 'state.dart' ;
19- import 'type.dart' ;
2016
2117/// Application which can update the widget tree through bundle file.
2218///
@@ -64,8 +60,7 @@ class FairApp extends InheritedWidget with AppState {
6460 final bool debugShowFairBanner;
6561
6662 /// Define a custom DynamicWidgetBuilder to solve special case
67- final DynamicWidgetBuilder Function (ProxyMirror ? proxyMirror, String ? page, BindingData ? bound,
68- {String ? bundle})? dynamicWidgetBuilder;
63+ List <DynamicWidgetBuilderFunction ?>? dynamicWidgetBuilder;
6964
7065 static final WidgetBuilder _defaultHolder = (BuildContext context) {
7166 return Container (
@@ -119,12 +114,23 @@ class FairApp extends InheritedWidget with AppState {
119114 properties.add (DiagnosticsProperty <Map <String , String >>('bundle' , bundleAlias));
120115 }
121116
122- static void runApplication (Widget app, {
123- Map <String , IFairPlugin >? plugins,
124- Map <String , String >? jsPlugins,
125- String ? package,
126- List <String >? baseJsSources,
117+ static void runApplication (
118+ Widget app, {
119+ Map <String , IFairPlugin >? plugins,
120+ Map <String , String >? jsPlugins,
121+ String ? package,
122+ List <String >? baseJsSources,
123+ List <IFairLibraryAdapter >? adapters,
127124 }) {
125+ if (plugins == null ) {
126+ plugins = {};
127+ }
128+ if (jsPlugins == null ) {
129+ jsPlugins = {};
130+ }
131+ //init 3rd-library adapter
132+ initFairLibraryAdapter (app, plugins: plugins, jsPlugins: jsPlugins, adapters: adapters);
133+
128134 // WidgetsFlutterBinding.ensureInitialized();
129135 FairPluginDispatcher .registerPlugins (plugins);
130136
@@ -139,4 +145,51 @@ class FairApp extends InheritedWidget with AppState {
139145 Runtime ().loadCoreJs (package: package, jsPlugins: jsPlugins, baseJsSources: baseJsSources).then ((value) => runApp (app));
140146 }
141147 }
148+
149+ ///[app] FairApp
150+ ///[plugins] Fair plugin code with Dart
151+ ///[jsPlugins] Fair plugin code with JavaScript
152+ ///[adapters] 3rd-party libraries which adapted Fair
153+ static void initFairLibraryAdapter (
154+ Widget app, {
155+ Map <String , IFairPlugin >? plugins,
156+ Map <String , String >? jsPlugins,
157+ List <IFairLibraryAdapter >? adapters,
158+ }) {
159+
160+ if (adapters != null && adapters.isNotEmpty) {
161+ adapters.forEach ((element) {
162+
163+ if (element.provideFairPlugins ()? .isNotEmpty == true ) {
164+ plugins? .addAll (element.provideFairPlugins ()! );
165+ }
166+
167+ if (element.provideJSPlugins ()? .isNotEmpty == true ) {
168+ jsPlugins? .addAll (element.provideJSPlugins ()! );
169+ }
170+
171+ if (app is FairApp ) {
172+ if (element.provideFairModule () != null ) {
173+ app.modules.addAll (element.provideFairModule ());
174+ }
175+
176+ if (element.provideGeneratedModule () != null && app.proxy is ProxyMirror ) {
177+ (app.proxy as ProxyMirror ).addGeneratedBinding (element.provideGeneratedModule ()! );
178+ }
179+
180+ if (element.provideFairDelegate () != null ) {
181+ GlobalState .instance ().addExtBuilder (element.provideFairDelegate ());
182+ }
183+
184+ if (element.provideDynamicWidgetBuilder () != null ) {
185+ if (app.dynamicWidgetBuilder == null ) {
186+ app.dynamicWidgetBuilder = [element.provideDynamicWidgetBuilder ()];
187+ } else {
188+ app.dynamicWidgetBuilder! .add (element.provideDynamicWidgetBuilder ());
189+ }
190+ }
191+ }
192+ });
193+ }
194+ }
142195}
0 commit comments