Comments (4)
Adding a method in constructor makes things harder to test. The suggested way is to call it via initializer or other way.
Can you provide an accessible repo to inspect it more? Thanks!
from bloc.
I've updated it to the following, the handleRequest is now a public method and this will only fire when not instantiated via the test:
blocTest<ConfirmEmailCubit, ConfirmEmailState>(
'Confirm Email with no params',
build: () => ConfirmEmailCubit(
mockNavigatorService,
{},
mockLogger,
testMode: true,
),
seed: () => ConfirmEmailLoading(),
expect: () => <ConfirmEmailState>[
ConfirmEmailError(S.current.no_direct_access),
],
act: (ConfirmEmailCubit cubit) => cubit.handleResponse(),
);
class ConfirmEmailCubit extends Cubit<ConfirmEmailState> {
final CustomNavigatorService _customNavigatorService;
final Map<String, dynamic> _queryParams;
final Logger _logger;
final bool testMode;
ConfirmEmailCubit(
this._customNavigatorService,
this._queryParams,
this._logger, {
this.testMode = false,
}) : super(ConfirmEmailLoading()) {
if (!testMode) {
handleResponse();
}
}
void handleResponse() {
if (_queryParams.containsKey('code')) {
_handleConfirmedRedirect();
} else if (_queryParams.containsKey('error') || _queryParams.containsKey('error_description')) {
_handleErrorRedirect();
} else {
emit(ConfirmEmailError(S.current.no_direct_access));
}
}
void _handleConfirmedRedirect() {
final code = _queryParams['code'].toString();
if (code.isEmpty) {
_logger.warning('No code passed with request');
emit(ConfirmEmailError(S.current.internal_server_error));
} else {
emit(ConfirmEmailConfirmed());
}
}
void _handleErrorRedirect() {
final errorCode = _queryParams['error'].toString();
final errorMessage = _queryParams['error_description'].toString();
if (errorCode.isNotEmpty && errorMessage.isNotEmpty) {
emit(ConfirmEmailError(errorMessage));
} else {
_logger.warning('No error code or message passed with request');
emit(ConfirmEmailError(S.current.internal_server_error));
}
}
void navigateToLogin() {
_customNavigatorService.navigateToScreenAndRemoveCurrentScreen(CustomRoutes.login);
}
}
from bloc.
Hi @Jeastwood1995 👋
Thanks for opening an issue!
Have you resolved this? If not, are you able to share a link to a minimal reproduction sample? Thanks!
from bloc.
Going to close this for now but if it's still an issue please let me know and provide a minimal reproduction sample and I'm happy to take a closer look 👍
from bloc.
Related Issues (20)
- Bad state: Cannot emit new states after calling close HOT 2
- State not update when adding a new item to the list HOT 1
- question: Is it a good practice to use "business" bloc HOT 4
- docs: replay bloc with multi bloc HOT 2
- fix: MultiBlocProvider and easy_localization library problem HOT 2
- docs: Add zh-cn translation for Bloc Concepts page HOT 1
- fix: transformer works incorrectly while registering each event separately HOT 2
- feat: Make hydrated_storage.dart:Storage.read() method async
- BlocBuilder widget not rebuilding the ui on certain states. HOT 6
- question: How do I design the architecture of A very complex desktop app HOT 3
- feat(bloc)!: add support for strongly typed errors on `Emitter.onEach`/`Emitter.forEach` HOT 2
- feat(bloc): add support for optional `StackTrace` on error handlers for `Emitter.onEach`/`Emitter.forEach` HOT 2
- feat: Add `force` to Emitter HOT 7
- feat: Privacy manifest file for iOS is missing HOT 4
- question: BlocObserver and Injectable Singletons HOT 3
- question: [flutter_todos] why don't close StreamController? HOT 1
- UI doesn't react to state changes after using Navigator.push HOT 4
- docs: Add/Change ko translation for Bloc docs
- docs: What is the best way to use riverpod with bloc for dependency injection? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bloc.