Comments (15)
Showing a modal is not business logic but UI logic.
The business logic is to set the error message.
from riverpod.
You need a StatefulWidget for this, or hooks. You cannot listen to an object inside StatelessWidgets.
from riverpod.
Could you expand on this? I don't understand the question.
from riverpod.
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.
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.
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.
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.
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.
Maybe expose a Stream and have the UI listen to it to call showDialog
.
from riverpod.
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.
stream.listen(...) or StreamBuilder
from riverpod.
Can you write a simple example about listen stream from View ?
from riverpod.
myProvider.read(context).myStream.listen(...)
from riverpod.
But it throw Exception when use in build.
where should I put it into if I use stateless ?
from riverpod.
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)
- [riverpod_lint] avoid_manual_providers_as_generated_provider_dependency HOT 2
- ref.refresh() fails when the returned value of a FutureProvider is an empty list HOT 1
- ref.invalidate() does not make another request to the server HOT 1
- update the TODO example. HOT 3
- The `API Reference` link in the sidebar leads to `hooks_riverpod` api reference HOT 1
- AsyncValue Issue HOT 3
- Stream ending with BadState when navigating back and forth quickly HOT 8
- Bad state: called ProviderSubscription.read on a subscription that was closed HOT 5
- Generics in Notifier generated HOT 2
- Support ProviderSubscription read inside useEffect dispose.
- Experimentation with macros
- [quality of life] make `riverpod_annotation` re-export utilities such as `@protected` HOT 2
- autoDispose is not working when the widget is disposed,and the same widget is registered again after the previous widget was disposed HOT 8
- `Unhandled Exception: setState() or markNeedsBuild() called during build.` when combining overrides and async providers
- We need a pattern to flow HOT 3
- Add AsyncValue documentation HOT 5
- Add dependency injection doc HOT 2
- Add WidgetRef documentation HOT 2
- await ref.watch(streamProvider.future); resolves on the first yield HOT 3
- What is the recommended way of watching derived values of state exposed through methods ? There's no mention of this in docs HOT 1
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 riverpod.