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