wip basics for bloc based state management
This commit is contained in:
5
lib/state/infrastructure/controller.dart
Normal file
5
lib/state/infrastructure/controller.dart
Normal file
@ -0,0 +1,5 @@
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
abstract class Controller<TContentType> extends Cubit<TContentType> {
|
||||
Controller(super.initialState);
|
||||
}
|
31
lib/state/infrastructure/loadable_state.dart
Normal file
31
lib/state/infrastructure/loadable_state.dart
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
class LoadableState<TState> {
|
||||
final LoadingState loadingState;
|
||||
final TState? data;
|
||||
|
||||
const LoadableState({required this.loadingState, required this.data});
|
||||
|
||||
LoadableState<TState> loading() =>
|
||||
LoadableState<TState>(loadingState: LoadingState.loading, data: null);
|
||||
|
||||
LoadableState<TState> cached(TState state) =>
|
||||
LoadableState<TState>(loadingState: LoadingState.loading, data: state);
|
||||
|
||||
LoadableState<TState> done(TState state) =>
|
||||
LoadableState<TState>(loadingState: LoadingState.none, data: state);
|
||||
|
||||
LoadableState<TState> error(TState state) =>
|
||||
LoadableState<TState>(loadingState: LoadingState.none, data: state);
|
||||
|
||||
bool isBackgroundLoading() =>
|
||||
loadingState == LoadingState.loading && data != null;
|
||||
|
||||
bool hasStateData() =>
|
||||
data != null;
|
||||
}
|
||||
|
||||
enum LoadingState {
|
||||
loading,
|
||||
failed,
|
||||
none,
|
||||
}
|
7
lib/state/infrastructure/state_extensions.dart
Normal file
7
lib/state/infrastructure/state_extensions.dart
Normal file
@ -0,0 +1,7 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
extension StateExtensions on BuildContext {
|
||||
TState readController<TState>() => read<TState>();
|
||||
TState watchController<TState>() => watch<TState>();
|
||||
}
|
Reference in New Issue
Block a user