serveWatchedArtisanalAppInBrowser function

Future<WatchedBrowserArtisanalAppHost> serveWatchedArtisanalAppInBrowser({
  1. required ReloadWidgetBuilder homeBuilder,
  2. required Iterable<String> watchRoots,
  3. ReloadController? controller,
  4. ReloadMode watchMode = ReloadMode.reload,
  5. Duration watchDebounce = const Duration(milliseconds: 150),
  6. bool watchRecursive = true,
  7. bool watchIgnoreHidden = true,
  8. Iterable<String> watchExtensions = const <String>['.dart'],
  9. InternetAddress? address,
  10. int port = 8080,
  11. String pagePath = '/',
  12. String webSocketPath = '/ws',
  13. String browserTitle = 'Artisanal Widget Host',
  14. String? pageHtml,
  15. String? title,
  16. Theme? theme,
  17. Theme? darkTheme,
  18. ThemeMode themeMode = ThemeMode.system,
  19. Theme themeBuilder()?,
  20. ImageAutoMode imageAutoMode = ImageAutoMode.sessionCapabilities,
  21. ProgramOptions? options,
})

Serves a watched, reloadable ArtisanalApp in the browser.

The returned host owns the browser server plus the optional file watcher and controller lifecycle.

Implementation

Future<WatchedBrowserArtisanalAppHost> serveWatchedArtisanalAppInBrowser({
  required ReloadWidgetBuilder homeBuilder,
  required Iterable<String> watchRoots,
  ReloadController? controller,
  ReloadMode watchMode = ReloadMode.reload,
  Duration watchDebounce = const Duration(milliseconds: 150),
  bool watchRecursive = true,
  bool watchIgnoreHidden = true,
  Iterable<String> watchExtensions = const <String>['.dart'],
  io.InternetAddress? address,
  int port = 8080,
  String pagePath = '/',
  String webSocketPath = '/ws',
  String browserTitle = 'Artisanal Widget Host',
  String? pageHtml,
  String? title,
  Theme? theme,
  Theme? darkTheme,
  ThemeMode themeMode = ThemeMode.system,
  Theme Function()? themeBuilder,
  ImageAutoMode imageAutoMode = ImageAutoMode.sessionCapabilities,
  runtime.ProgramOptions? options,
}) async {
  final reloadController = controller ?? ReloadController();
  final ownsController = controller == null;
  final watcher = await ReloadFileWatcher.watch(
    controller: reloadController,
    roots: watchRoots,
    mode: watchMode,
    debounce: watchDebounce,
    recursive: watchRecursive,
    ignoreHidden: watchIgnoreHidden,
    extensions: watchExtensions,
  );

  try {
    final server = await serveReloadableArtisanalAppInBrowser(
      controller: reloadController,
      homeBuilder: homeBuilder,
      address: address,
      port: port,
      pagePath: pagePath,
      webSocketPath: webSocketPath,
      browserTitle: browserTitle,
      pageHtml: pageHtml,
      title: title,
      theme: theme,
      darkTheme: darkTheme,
      themeMode: themeMode,
      themeBuilder: themeBuilder,
      imageAutoMode: imageAutoMode,
      options: options,
    );

    return WatchedBrowserArtisanalAppHost._(
      server: server,
      controller: reloadController,
      watcher: watcher,
      ownsController: ownsController,
    );
  } catch (_) {
    await watcher.dispose();
    if (ownsController) {
      await reloadController.dispose();
    }
    rethrow;
  }
}