import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:get/get.dart'; abstract class BaseController extends GetxController { final viewState = Rx>(Right(UIState.idle)); void consumeState(Stream> newStateStream) async { newStateStream.listen( (state) => onData(state), onError: (error) => onError(error), onDone: () => onDone() ); } void getState(Future> newStateStream) async { final state = await newStateStream; state.fold( (failure) => onError(failure), (success) => onData(state) ); } void onData(Either newState) { viewState.value = newState; } void onError(dynamic error); void onDone(); }