reset function

Future<void> reset(
  1. BuildContext context,
  2. WidgetRef ref
)

Implementation

Future<void> reset(BuildContext context, WidgetRef ref) async {
  debugText('  RESET');

  // Clear all .svg files in the tempDir.
  final tempDirectory = Directory(tempDir);
  if (await tempDirectory.exists()) {
    final svgFiles = tempDirectory
        .listSync()
        .where((file) => file is File && file.path.endsWith('.svg'));

    for (var file in svgFiles) {
      try {
        await File(file.path).delete();
        debugPrint('Deleted: ${file.path}');
      } catch (e) {
        debugPrint('Error deleting file ${file.path}: $e');
      }
    }
  }

  // Reset the app.
  //
  // Ideally if the app renders based on states stored in providers, we just
  // need to reset each provider to the starting value.

  // GENERAL PROVIDERS

  ref.invalidate(statusProvider);
  ref.invalidate(stderrProvider);
  ref.invalidate(stdoutProvider);

  // DATASET TAB

  // Note that we do not reset the toggles - they need to remain as they are.

  ref.invalidate(datasetLoaded);
  ref.invalidate(datatypeProvider);
  ref.invalidate(pathProvider);
  ref.invalidate(rolesProvider);
  ref.invalidate(typesProvider);
  ref.invalidate(scriptProvider);
  ref.invalidate(typesProvider);
  ref.invalidate(metaDataProvider);

  // MODEL TAB

  ref.invalidate(modelProvider);
  ref.invalidate(targetProvider);

  // Reset WORDCLOUD tab.

  ref.invalidate(wordCloudBuildProvider);
  ref.invalidate(checkboxProvider);
  ref.invalidate(punctuationProvider);
  ref.invalidate(stemProvider);
  ref.invalidate(stopwordProvider);
  ref.invalidate(maxWordProvider);
  ref.invalidate(minFreqProvider);

  // Reset all check boxes in Evaluate tab.

  for (final provider in evaluateProviders) {
    ref.invalidate(provider);
  }

  // Reset the stdoutProvider, this resets the tree tab and the forest tab as
  // they depend on it

  ref.invalidate(stdoutProvider);

  PackageInfo info = await PackageInfo.fromPlatform();
  ref.read(scriptProvider.notifier).update(
        (state) => state
            .replaceAll('VERSION', info.version)
            .replaceAll('TIMESTAMP', 'Timestamp ${timestamp()}'),
      );

  // CONSOLE TAB

  ref.invalidate(terminalProvider);
  if (context.mounted) rStart(context, ref);

  // TODO yyx 20240618 might need to reset sub-tabs to the first one.
  // RESET TAB INDEX (including sub-tabs)

  rattleHomeKey.currentState?.goToDatasetTab();
}