flutter_causality 0.0.2 copy "flutter_causality: ^0.0.2" to clipboard
flutter_causality: ^0.0.2 copied to clipboard

Flutter extensions for the causality Dart package. Easily observe causes in your widget tree.

example/lib/main.dart

import 'package:causality/causality.dart';
import 'package:flutter/material.dart';
import 'package:flutter_causality/flutter_causality.dart';

void main() {
  _setupObservations();
  AppStartedCause().emit(universe: causalityUniverse);
}

final causalityUniverse = CausalityUniverse();

final getDataEffect = Effect((_) async {
  await Future<void>.delayed(const Duration(seconds: 5));
  return [DataAvailableCause('data')];
});

final runAppEffect = Effect((_) {
  ViewModel(causalityUniverse);
  runApp(
    CausalityUniverseWidget(
      causalityUniverse: causalityUniverse,
      child: MaterialApp(
        home: Scaffold(
          body: EffectWidget(
            builder: (cause) => switch (cause) {
              ViewModelUpdatedCause _ => Center(
                  child: Text(cause.viewModel.data ?? ''),
                ),
              _ => const Center(
                  child: CircularProgressIndicator(),
                ),
            },
            observedCauseTypes: const [
              ViewModelUpdatedCause,
            ],
          ),
        ),
      ),
    ),
  );
  return [];
});

void _setupObservations() {
  getDataEffect.observe(
    [
      RequestDataCause,
    ],
    universe: causalityUniverse,
  );
  runAppEffect.observe(
    [
      AppStartedCause,
    ],
    universe: causalityUniverse,
  );
}

class AppStartedCause extends Cause {}

class DataAvailableCause extends Cause {
  final String data;

  DataAvailableCause(this.data);
}

class RequestDataCause extends Cause {}

class ViewModel {
  String? data;

  ViewModel(CausalityUniverse causalityUniverse) {
    Effect((cause) {
      if (cause case DataAvailableCause _) {
        data = cause.data;
      }
      return [
        ViewModelUpdatedCause(this),
      ];
    }).observe(
      [
        DataAvailableCause,
      ],
      universe: causalityUniverse,
    );

    RequestDataCause().emit(universe: causalityUniverse);
  }
}

class ViewModelUpdatedCause extends Cause {
  final ViewModel viewModel;

  ViewModelUpdatedCause(this.viewModel);
}
0
likes
160
pub points
0%
popularity

Publisher

verified publishergoddchen.de

Flutter extensions for the causality Dart package. Easily observe causes in your widget tree.

Repository (GitHub)
View/report issues

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

causality, flutter

More

Packages that depend on flutter_causality