Я хочу реализовать архитектуру плагинов во 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;