wip basics for bloc based state management

This commit is contained in:
2024-04-22 23:02:03 +02:00
parent 19aca8f97f
commit 7129c0dee8
22 changed files with 622 additions and 4 deletions

View File

@ -0,0 +1,5 @@
import 'package:flutter_bloc/flutter_bloc.dart';
abstract class Controller<TContentType> extends Cubit<TContentType> {
Controller(super.initialState);
}

View 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,
}

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