繁体   English   中英

Riverpod Flutter:一个屏幕的多个提供商

[英]Riverpod Flutter: Multiple providers for one screen

我是riverpod的新手,我想检查我做的事情是否正确。

我的 Flutter 应用程序上有一个屏幕,用户可以在其中输入有关会话的大量信息。 像开始时间、结束时间、注释、持续时间、日期等。所有这些数据最终都存储在一个飞镖复杂对象 MySession() 中,将所有上述属性。

我的问题是,与此同时,我正在为每个字段创建一个 serate 提供程序。 像这样:

final selectedDateProvider = StateProvider((ref) => DateTime.now());
final sessionDurationMinutesProvider = StateProvider<int>((ref) => 0);

现在在课堂上,我在 build 方法中这样调用提供者:

selectedDate = ref.watch(selectedDateProvider);
sessionDurationMinutes = ref.watch(sessionDurationMinutesProvider);

然后我将它们显示在小部件中。

当他们正在编辑时,我保存这样的状态:

ref.read(selectedDateProvider.notifier).state = datePick;

我的问题是,我在这个页面上有很多很多字段。 所以我必须为每个领域创建很多提供者。 这是正确的做法吗? 我可以不为所有这些字段创建一个自定义类,然后创建一个返回这个自定义类的提供者吗?

在riverpod docs它说:如果您的状态是一个复杂的对象(例如自定义类,列表/地图......),则不应使用StateProvider https://riverpod.dev/docs/providers/state_provider

我希望它清楚!

谢谢

你已经回答了你的问题;)

是的你可以。

创建一个类来存储所有输入字段的状态并通过StateProvider公开它。

为了有效地做到这一点,您可能需要一个可以手动编写或生成的copyWith方法。 一种可能的方法是使用freezed

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM