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
    )?,
})

Purely meant to be called with running Vyuh in widget-mode, using VyuhContentWidget. There is a convenience API inside vyuh_extension_content to make this easier. Use the VyuhContentBinding.init() instead.

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();
    }

    // Time to associate the ContentPlugin with the ContentExtensionBuilder. This keeps
    // track of the type registry and helps in building ContentItems
    await _extensionBuilder.init(extensionDescriptors);

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

  _initialized = true;
}