GithubHelp home page GithubHelp logo

Comments (15)

rrousselGit avatar rrousselGit commented on May 14, 2024 1

Showing a modal is not business logic but UI logic.
The business logic is to set the error message.

from riverpod.

rrousselGit avatar rrousselGit commented on May 14, 2024 1

You need a StatefulWidget for this, or hooks. You cannot listen to an object inside StatelessWidgets.

from riverpod.

rrousselGit avatar rrousselGit commented on May 14, 2024

Could you expand on this? I don't understand the question.

from riverpod.

tbm98 avatar tbm98 commented on May 14, 2024

In a real world example, when the user clicks the login button, I will call the login (username, password) function of the provider. and provider after processing will display the result of success or failure, View will display a dialog message to the user. But in this case, the provider cannot directly display the dialog message.

from riverpod.

rrousselGit avatar rrousselGit commented on May 14, 2024

It is not the role of providers to display dialogs.

Make your provider return the result, and have the UI process that result to display things

from riverpod.

tbm98 avatar tbm98 commented on May 14, 2024

I think if you do that, the view will have to handle a bit of logic. As with MVP architecture, View will only provide an interface to the presenter and the View will not implement any logic.

from riverpod.

tbm98 avatar tbm98 commented on May 14, 2024

in some special cases, an intermittent process and it needs to show the message while it has not finished running. For example, the process of loading my data consists of 5 parts, and after the download is complete, each part will display a message and continue to download the next part, if processed in View, there will need 5 separate functions or At least logic view will have to call at 5 times.
like this

void loadDataClicked() async{
 final aResult = await notifier.load(a);
 if(aResult.isSuccess()){
   showDialog(aResult);
 }else{
 return;
 }

 final bResult = await notifier.load(b);
 if(bResult.isSuccess()){
   showDialog(bResult);
 }else{
 return;
 }

 final cResult = await notifier.load(c);
 if(cResult.isSuccess()){
   showDialog(cResult);
 }else{
 return;
 }

 final dResult = await notifier.load(d);
 if(dResult.isSuccess()){
   showDialog(dResult);
 }else{
 return;
 }

 final eResult = await notifier.load(e);
 if(eResult.isSuccess()){
   showDialog(eResult);
 }else{
 return;
 }
}

from riverpod.

tbm98 avatar tbm98 commented on May 14, 2024

It would be simpler to write like this:

  void showDialog(...){
    // notifier will call it or notifier send event to View => View call it
  }

  void loadDataClicked() {
    notifier.load(a,b,c,d,e);
  }

from riverpod.

rrousselGit avatar rrousselGit commented on May 14, 2024

Maybe expose a Stream and have the UI listen to it to call showDialog.

from riverpod.

tbm98 avatar tbm98 commented on May 14, 2024

but how can I listen stream (for user not use hook)?

  @override
  Widget build(BuildContext context) {
    Consumer((_, read) {
      print('state is ${read(counterProvider).state}'); //not work
    });
  .....
  @override
  Widget build(BuildContext context) {
    print('state is ${counterProvider.read(context).state}'); // can't read in build 
    ......

from riverpod.

rrousselGit avatar rrousselGit commented on May 14, 2024

stream.listen(...) or StreamBuilder

from riverpod.

tbm98 avatar tbm98 commented on May 14, 2024

Can you write a simple example about listen stream from View ?

from riverpod.

rrousselGit avatar rrousselGit commented on May 14, 2024

myProvider.read(context).myStream.listen(...)

from riverpod.

tbm98 avatar tbm98 commented on May 14, 2024

But it throw Exception when use in build.
where should I put it into if I use stateless ?

from riverpod.

tbm98 avatar tbm98 commented on May 14, 2024

You need a StatefulWidget for this, or hooks. You cannot listen to an object inside StatelessWidgets.

I think it is a best option for now.

from riverpod.

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.