Comments (4)
Overall this looks amazing, the only thing I would improve is SpotBlocWidget
, I would separate into two widgets to separate the injection logic from the UI logic, so it would look something like this :
class SpotBlocView extends StatelessWidget {
final LatLon location;
const SpotBlocView({super.key, required this.location});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) =>
SpotCubit(SpotRepository())..loadSpotInfoAndReviews(location),
child: SpotBlocWidget(),
);
}
}
class SpotBlocWidget extends StatelessWidget {
const SpotBlocWidget({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<SpotCubit, SpotState>(
builder: (context, state) {
if (state is SpotLoading) {
return const CircularProgressIndicator();
} else if (state is SpotLoaded) {
return Column(
children: [
Text(location.toString()),
Text(state.info.isPublic.toString()),
Text(state.reviews.length.toString()),
],
);
} else if (state is SpotError) {
return Text(state.message);
} else {
return const Text('Something went wrong');
}
},
);
}
}
from bloc.
@ethicnology hey, sorry for the delayed response.
The DataProvider
has nothing to do with the Provider
package and with StateManagement
, it's an unfortunate naming convention.
And yes, I agree with you, moving all those methods (and caching) to the provider
is a good idea. It will keep your models lighter, and will help with separation of concerns.
In general a DataProvider
's role is to communicate with the external sources (databases, servers, local storage, etc) and to return raw data. Then you usually have a Repository
that takes those raw data and converts them to Model
s for your application. And then the Bloc
/Cubit
and UI
work with these Model
s just like you have done in your code.
from bloc.
hey!
overall it looks good to me
i'm a bit skeptical about the SpotInfo.get
and SpotReview.get
methods
are you doing a network request in them (or somehow communicating with external resources)?
if yes, following the BLoC
principles, I would recommend placing those requests in a DataProvider
class
you can read more about it here: https://bloclibrary.dev/architecture/#data-provider
from bloc.
Thanks for your advice @ksyro98
Yes SpotInfo.get
and SpotReview.get
represents database tables and functions to access the related data.
Does DataProvider
has anything to do with Provider
package and StateManagement
?
Should I create first in models
the class without database functions and then in providers
functions to access the data get
add
that may wrap select
insert
and caching when needed ?
from bloc.
Related Issues (20)
- fix: States of Different instances of the same bloc are interfering
- docs: BlocListener example loss a "," HOT 1
- fix: Bloc not calling while calling event with cascade in BlocProvider. But working fine if assigned to a variable and passed to BlocProvider. HOT 1
- fix: expected: [<States>], actual [] when unit testing landing page cubit HOT 4
- 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
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.