widgetInit method

void widgetInit({
  1. PluginDescriptor? plugins,
  2. PlatformWidgetBuilder? widgetBuilder,
  3. required ExtensionBuilder<ExtensionDescriptor> extensionBuilder,
  4. required List<ExtensionDescriptor> extensionDescriptors,
  5. Future<void> onReady(
    1. VyuhBinding
    )?,
})

Runs Vyuh in widget mode: plugins and one extension builder, without runApp, features or a router. Packages that embed Vyuh widgets in a non-Vyuh app wrap this in their own binding API.

Make sure to call this before calling Flutter's runApp().

!!! NOTE !!!

DO NOT call this when using the Vyuh framework directly.

Implementation

void widgetInit({
  PluginDescriptor? plugins,
  PlatformWidgetBuilder? widgetBuilder,
  required ExtensionBuilder extensionBuilder,
  required List<ExtensionDescriptor> extensionDescriptors,
  Future<void> Function(VyuhBinding)? onReady,
}) async {
  if (_initialized) {
    return;
  }

  _initInvoked = true;
  _mode = _RunMode.widget;

  this.widgetBuilder = widgetBuilder ?? PlatformWidgetBuilder.system;

  _pluginDescriptor = plugins ?? PluginDescriptor.system;
  final effectivePlugins = _pluginDescriptor.plugins;

  _extensionBuilder = extensionBuilder;

  // Invoke the init inline
  widgetReady = Future(() async {
    // Cleanup
    final disposeFns = effectivePlugins.map((e) => e.dispose());
    await Future.wait(disposeFns, eagerError: true);

    // Init
    for (final plugin in effectivePlugins) {
      await plugin.init();
    }

    // Let the extension builder register its contributions.
    await _extensionBuilder.init(extensionDescriptors);

    await onReady?.call(VyuhBinding.instance);
  });

  _initialized = true;
}