runWatchedArtisanalApp function

Future<void> runWatchedArtisanalApp({
  1. required ReloadWidgetBuilder homeBuilder,
  2. required Iterable<String> watchRoots,
  3. String? title,
  4. Theme? theme,
  5. Theme? darkTheme,
  6. ThemeMode themeMode = ThemeMode.system,
  7. Theme themeBuilder()?,
  8. ReloadController? controller,
  9. ReloadMode watchMode = ReloadMode.reload,
  10. Duration watchDebounce = const Duration(milliseconds: 150),
  11. bool watchRecursive = true,
  12. bool watchIgnoreHidden = true,
  13. Iterable<String> watchExtensions = const <String>['.dart'],
  14. ProgramOptions? options,
  15. ProgramHost? host,
  16. ImageAutoMode? imageAutoMode,
})

Runs an ArtisanalApp with a watched, reloadable home widget.

This uses ReloadHost under the hood and automatically disposes the watcher and controller when the program exits.

Implementation

Future<void> runWatchedArtisanalApp({
  required ReloadWidgetBuilder homeBuilder,
  required Iterable<String> watchRoots,
  String? title,
  Theme? theme,
  Theme? darkTheme,
  ThemeMode themeMode = ThemeMode.system,
  Theme Function()? themeBuilder,
  ReloadController? controller,
  ReloadMode watchMode = ReloadMode.reload,
  Duration watchDebounce = const Duration(milliseconds: 150),
  bool watchRecursive = true,
  bool watchIgnoreHidden = true,
  Iterable<String> watchExtensions = const <String>['.dart'],
  runtime.ProgramOptions? options,
  hosts.ProgramHost? host,
  ImageAutoMode? imageAutoMode,
}) 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 {
    await runReloadableArtisanalApp(
      title: title,
      theme: theme,
      darkTheme: darkTheme,
      themeMode: themeMode,
      themeBuilder: themeBuilder,
      controller: reloadController,
      homeBuilder: homeBuilder,
      options: options,
      host: host,
      imageAutoMode: imageAutoMode,
    );
  } finally {
    await watcher.dispose();
    if (ownsController) {
      await reloadController.dispose();
    }
  }
}