Coder Social home page Coder Social logo

Comments (4)

FarisArmoush avatar FarisArmoush commented on June 12, 2024 1

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.

ksyro98 avatar ksyro98 commented on June 12, 2024 1

@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 Models for your application. And then the Bloc/Cubit and UI work with these Models just like you have done in your code.

from bloc.

ksyro98 avatar ksyro98 commented on June 12, 2024

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.

ethicnology avatar ethicnology commented on June 12, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.