withSpinner<T> function

Future<T> withSpinner<T>({
  1. required String label,
  2. required Future<T> task(),
  3. String? successLabel,
  4. String? failLabel,
  5. SpinnerStyle style = SpinnerStyle.braille,
})

Convenience: wrap an async task in a spinner automatically.

final result = await withSpinner(
  label: 'Grouping dependencies via FlutterGems',
  task: () => serverApi.groupPackages(packages),
);

Implementation

Future<T> withSpinner<T>({
  required String label,
  required Future<T> Function() task,
  String? successLabel,
  String? failLabel,
  SpinnerStyle style = SpinnerStyle.braille,
}) async {
  final spinner = Spinner(label: label, style: style);
  spinner.start();
  try {
    final result = await task();
    spinner.success(successLabel);
    return result;
  } catch (e) {
    spinner.fail(failLabel ?? 'Failed: $e');
    rethrow;
  }
}