levit_dart 0.0.6 copy "levit_dart: ^0.0.6" to clipboard
levit_dart: ^0.0.6 copied to clipboard

Utility mixins and tools for Levit Dart controllers.

example/main.dart

import 'dart:async';
import 'package:levit_dart/levit_dart.dart';

// -----------------------------------------------------------------------------
// Controller Implementations
// -----------------------------------------------------------------------------

class TaskExampleController extends LevitController with LevitTasksMixin {}

class SelectionExampleController<T> extends LevitController
    with LevitSelectionMixin<T> {}

class TimeExampleController extends LevitController with LevitTimeMixin {}

class LoopExampleController extends LevitController
    with LevitLoopExecutionMixin {}

/// A comprehensive example demonstrating the high-level utility mixins
/// provided by the `levit_dart` package.
void main() async {
  // Example runs in an isolated root scope and disposes it at the end.
  final scope = LevitScope.root();

  print('--- Levit Dart Example ---');

  print('\n1. TasksMixin Demo - Execution Queue & Retries');
  final taskController = scope.put(() => TaskExampleController());

  print('Starting a task that fails once but succeeds on retry...');
  int attempts = 0;
  final result = await taskController.tasksEngine.schedule<String>(
    () async {
      attempts++;
      if (attempts == 1) {
        print('  Attempt 1: Throwing temporary error...');
        throw Exception('Temporary network error');
      }
      return 'Success after $attempts attempts!';
    },
    retries: 2,
    retryDelay: const Duration(milliseconds: 500),
  );
  print('Result: $result');

  print('\n2. SelectionMixin Demo - Multi-selection');
  final selectionController =
      scope.put(() => SelectionExampleController<String>());

  selectionController.select('Apple');
  selectionController.select('Banana');
  print('Selected items: ${selectionController.selectedItems.value}');
  print('Is "Apple" selected? ${selectionController.isSelected('Apple')}');

  selectionController.toggle('Banana');
  print('After toggling "Banana": ${selectionController.selectedItems.value}');

  print('\n3. TimeMixin Demo - Debouncing');
  final timeController = scope.put(() => TimeExampleController());

  print(
      'Triggering multiple debounced calls (only the last one should run)...');
  for (int i = 1; i <= 3; i++) {
    timeController.debounce('search', const Duration(milliseconds: 300), () {
      print('  Debounced search executed (last call wins)');
    });
  }
  await Future.delayed(const Duration(milliseconds: 500));

  print('\n4. ExecutionLoopMixin Demo - Periodic Loops');
  final loopController = scope.put(() => LoopExampleController());

  print('Starting a background loop (ticking every 200ms)...');
  loopController.loopEngine.startLoop('ticker', () async {
    print(
        '  Tick! (Status: ${loopController.loopEngine.getServiceStatus('ticker')?.value})');
  }, delay: const Duration(milliseconds: 200));

  await Future.delayed(const Duration(milliseconds: 700));
  print('Stopping background loop.');
  loopController.loopEngine.stopService('ticker');

  print('\n--- Example Complete ---');
  scope.dispose();
}
1
likes
160
points
242
downloads

Publisher

unverified uploader

Weekly Downloads

Utility mixins and tools for Levit Dart controllers.

Repository (GitHub)
View/report issues
Contributing

Topics

#utilities #mixins #tasks

Documentation

API reference

License

MIT (license)

Dependencies

levit_dart_core, meta

More

Packages that depend on levit_dart