如何在 Flutter Dart 中实现插件架构

     2023-02-22     230

关键词:

【中文标题】如何在 Flutter Dart 中实现插件架构【英文标题】:How to implement the Plugin Architecture in Flutter Dart 【发布时间】:2020-02-09 14:24:37 【问题描述】:

我想在 Flutter Dart 中实现一个插件架构。流程如下: 1. 用户下载应用。 2. 用户从我们的网站加载插件。 3. 应用程序查看插件是否实现了接口。 4. 如果实现了接口,则将插件中的信息和小部件加载到应用程序中。

我已经在 C# 中使用在运行时加载已编译的 DLL 实现了相同的过程,但无法为 Flutter 找到它。

我已经查看了一些以前在互联网上可用的问题和资源,我发现最接近的是https://pub.dev/packages/plugins,但该插件在 Dart 2 中不受支持并且已弃用

这是我用 C# 实现的代码。

            int i = 0;

            if (Directory.Exists("Plugins"))
            
                dllFileNames = Directory.GetFiles("Plugins", "*.dll");

                ICollection<Assembly> assemblies = new List<Assembly>(dllFileNames.Length);
                foreach (string dllFile in dllFileNames)
                
                    AssemblyName an = AssemblyName.GetAssemblyName(dllFile);
                    Assembly assembly = Assembly.Load(an);
                    assemblies.Add(assembly);
                

                Type pluginType = typeof(IPlugin);
                List<Type> pluginTypes = new List<Type>();
                foreach (Assembly assembly in assemblies)
                
                    if (assembly != null)
                    
                        Type[] types = assembly.GetTypes();
                        foreach (Type type in types)
                        
                            if (type.IsInterface || type.IsAbstract)
                            
                                continue;
                            
                            else if (pluginType.IsAssignableFrom(type))
                            
                                pluginTypes.Add(type);
                            
                        
                    

                    i++;
                

                ICollection<IPlugin> plugins = new List<IPlugin>(pluginTypes.Count);
                foreach (Type type in pluginTypes)
                
                    IPlugin plugin = (IPlugin)Activator.CreateInstance(type);
                    plugin.Initiate();
                    plugins.Add(plugin);
                

                return plugins;
            

            return null;

【问题讨论】:

非 Dart 解决方案可能是 pub.dev/packages/flutter_lua 或 pub.dev/packages/flutter_wasm 还没有尝试过这些。或者甚至是 webview ???? 看起来更复杂但似乎更强大pub.dev/packages/flutter_liquidcore 基本上提供了一个 NodeJS 运行时。 任何新的解决方案? 【参考方案1】:

这可能是不可能的。

为您的应用上传到商店做准备的 AOT 编译的一部分是摇树,删除当前构建不需要的所有内容。所以,你的插件需要调用的任何东西都没有了。

【讨论】:

感谢分享。看完你的回答后,我回到了董事会并提出了一个理论解决方案(截至目前),以在 Flutter 中创建一个体面的插件架构。

如何在 Flutter 中实现应用内购买订阅?

】如何在Flutter中实现应用内购买订阅?【英文标题】:HowtoimplementIn-AppPurchasesSubscriptioninFlutter?【发布时间】:2019-05-2115:59:57【问题描述】:我想在我的Flutter应用中为iOS和Android设备提供自动续订订阅。用户可以订阅1个月。目前... 查看详情

如何在 Flutter 中实现 App Tracking Transparency

】如何在Flutter中实现AppTrackingTransparency【英文标题】:HowtoimplementAppTrackingTransparencyinFlutter【发布时间】:2021-10-0717:25:17【问题描述】:我向苹果提交了我的应用程序,但它被拒绝了,因为我没有添加应用程序透明度。到目前为... 查看详情

Flutter:是不是可以在 main.dart 中实现一次快餐栏,例如,当连接状态发生变化时,用于所有屏幕

】Flutter:是不是可以在main.dart中实现一次快餐栏,例如,当连接状态发生变化时,用于所有屏幕【英文标题】:Flutter:isitpossibletoimplementasnackbaronetimeinmain.dartforexampleforallscreenwhentheconnectivitystatuschangedFlutter:是否可以在main.dart中实... 查看详情

如何使用工厂构造函数在 Dart 中实现单例模式?

】如何使用工厂构造函数在Dart中实现单例模式?【英文标题】:HowtoimplementSingletonpatterninDartusingfactoryconstructors?【发布时间】:2019-05-2603:15:48【问题描述】:我正在尝试在数据库帮助程序类中实现单例模式,但是,我似乎无法理... 查看详情

flutter中实现磨砂玻璃效果

flutter中实现磨砂玻璃效果前言磨砂玻璃效果是一个很酷的用户界面概念,使我们的用户界面看起来更有吸引力。它基本上是一个模糊的覆盖与减少不透明度,以区分或减少某一观点。这个功能看起来确实不错,但是... 查看详情

如何在 Flutter 中实现 SingleLine 水平 CalendarView

】如何在Flutter中实现SingleLine水平CalendarView【英文标题】:HowtoachieveSingleLineHorizontalCalendarViewinFlutter【发布时间】:2020-02-0209:29:56【问题描述】:我是Flutter的新手。如何在颤动中实现SingleLine水平滚动CalendarView和日期选择。请找到... 查看详情

如何在 Flutter 中实现 CheckBox?

】如何在Flutter中实现CheckBox?【英文标题】:HowtoimplementCheckBoxinFlutter?【发布时间】:2019-03-1917:20:07【问题描述】:这里我提到了我的复选框代码。我是Flutter的新手,所以我必须实现它以实现记住我的功能。代码:Container(padding:... 查看详情

如何在 Flutter 的消息中实现用户提及?

】如何在Flutter的消息中实现用户提及?【英文标题】:HowtoimplementusermentionsinmessagesonFlutter?【发布时间】:2019-12-2105:02:35【问题描述】:我需要在消息中实现用户提及,就像在Flutter上的流行信使中一样。当我单击输入字段中的某... 查看详情

如何在 Flutter 中实现 GooglePlay TabBar?

】如何在Flutter中实现GooglePlayTabBar?【英文标题】:HowtoimplementGooglePlayTabBarinflutter?【发布时间】:2020-06-1415:26:18【问题描述】:在大家开始发布一些初学者UI教程视频的链接之前,请知道这是一个已知问题,我正在寻找解决方法... 查看详情

如何在 Flutter 中实现“磨砂玻璃”效果?

】如何在Flutter中实现“磨砂玻璃”效果?【英文标题】:HowdoIdothe"frostedglass"effectinFlutter?【发布时间】:2017-09-1822:29:18【问题描述】:我正在编写一个Flutter应用程序,我想使用/实现iOS上常见的“磨砂玻璃”效果。我该怎... 查看详情

如何在 Flutter 应用中实现 reCaptcha

】如何在Flutter应用中实现reCaptcha【英文标题】:HowtoimplementreCaptchaintoaflutterapp【发布时间】:2020-06-2518:30:40【问题描述】:我正在尝试在我的颤振应用程序中实现reCaptcha功能,但在验证码注册中,我需要提供一个我没有用于移动... 查看详情

如何在 Flutter 中实现这种排序查询?

】如何在Flutter中实现这种排序查询?【英文标题】:HowtoachievethiskindofsortingqueryinFlutter?【发布时间】:2021-09-0112:24:53【问题描述】:IM试图通过下图实现外观,数据来自本地数据库,使用sqflite。我有db"model"类和用于int的db类,查... 查看详情

如何在flutter中实现agora视频通话邀请

】如何在flutter中实现agora视频通话邀请【英文标题】:howtoimplementagoravideocallinvitationinflutter【发布时间】:2021-10-0309:07:42【问题描述】:我是Flutter新手我想知道使用agoraSDK实现视频通话邀请的最佳方式双方。//joingchannelStringtoken=aw... 查看详情

如何在flutter中实现包月? (新方法)

】如何在flutter中实现包月?(新方法)【英文标题】:Howtoimplementsubscriptionmonthlyinflutter?(Newmethods)【发布时间】:2021-08-1020:12:58【问题描述】:我正在尝试使用应用内购买包实现对我的Flutter应用的每月订阅。经过数小时的搜索,... 查看详情

如何在 Flutter Web 中实现 Stripe 支付?

】如何在FlutterWeb中实现Stripe支付?【英文标题】:HowtoimplementStripePaymentsinFlutterWeb?【发布时间】:2021-01-3122:52:29【问题描述】:我正在尝试在我的Web应用(Flutter)中实现StripePayments,但我在https://pub.dev/中找不到任何包来满足我的愿... 查看详情

Flutter 按住闪屏 3 秒。如何在 Flutter 中实现闪屏?

】Flutter按住闪屏3秒。如何在Flutter中实现闪屏?【英文标题】:Flutterholdsplashscreenfor3Seconds.HowtoimplementsplashscreeninFlutter?【发布时间】:2018-10-1206:36:29【问题描述】:如何在颤动中显示启动屏幕3秒,然后转到下一个我的登录屏幕。... 查看详情

如何在 Flutter 应用中实现支付?

】如何在Flutter应用中实现支付?【英文标题】:HowtoimplementpaymentsinaFlutterapp?【发布时间】:2019-08-0412:35:30【问题描述】:我正在使用Flutter构建我的第一个应用程序。该应用程序旨在让用户能够相互买卖产品,我想设置功能以通... 查看详情

如何在 Flutter 中实现可滚动的画布?

】如何在Flutter中实现可滚动的画布?【英文标题】:HowtoachievescrollablecanvasinFlutter?【发布时间】:2019-01-2401:55:37【问题描述】:我是一位经验丰富的iOS开发人员,但对Flutter完全陌生。现在我在Flutter中遇到了ScrollView的问题。我想... 查看详情