- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,需要在提要屏幕上显示视频上传进度指示器。返回上传进度的代码位于视频客户端类中,该类不在 Feed 屏幕的小部件树中,并且在视频开始上传时,Feed 屏幕甚至没有打开。
我想要做的是使用 Riverpod 在视频客户端类中全局更新上传值,以便在打开提要屏幕时显示上传进度。
问题是 Video Client 是一个单独的类,没有任何构建上下文,我正在尝试更新该值。我听说 Riverpod 可以在没有构建上下文的情况下设置状态。但是我可以看到更新状态的唯一方法仍然需要上下文。
在主函数中,我在这里添加了提供者作用域:
void main() {
FlowRouter.setupRouter();
runApp(ProviderScope(child: MyApp()));
}
我有一个上传模型,它扩展了用于更新值的更改通知程序:
class UploadModel extends ChangeNotifier{
UploadModel();
int _bytesTotal = 0;
int _bytesUploaded = 0;
bool _uploadVisible = false;
void setBytesTotal(int value){
_bytesTotal = value;
notifyListeners();
}
int get getBytesTotal => _bytesTotal;
void setBytesUploaded(int value){
_bytesUploaded = value;
notifyListeners();
}
int get getBytesUploaded => _bytesUploaded;
void setUploadVisible(bool value){
_uploadVisible = value;
notifyListeners();
}
bool get getUploadVisible => _uploadVisible;
}
在 Feed Widget 中,我有以下代码来监视和更新上传小部件:
final uploadProvider = riverpod.ChangeNotifierProvider((ref) => UploadModel());
class UploaderProgressWheel extends riverpod.ConsumerWidget {
@override
Widget build(BuildContext context, ScopedReader watch) {
final uploadInfo = watch(uploadProvider);
return Text(uploadInfo.getBytesUploaded.toString());
}
但是当我去更新视频客户端类中的上传值时,我看不到任何不需要上下文的方法,我想我需要再次在视频客户端类中添加提供者,如下所示:
final uploadProvider = riverpod.ChangeNotifierProvider((ref) => UploadModel());
然后我想从 UploadModel 类中使用 setBytesUploaded() 访问设置值,但我无法访问它,我发现的唯一示例如下所示,需要上下文:
context.read(uploadProvider).state =
谢谢
最佳答案
class VideoClient { //Example class
final Reader read; //so you can read other providers inside this
int _i = 0; //just for example
VideoClient(this.read);
void exampleMethod(){
read(uploadProvider).setBytesUploaded(_i++);
// each time this method is called a new int is sent to notify the uploadModel
}
//.... your methods
}
final VideoProvider = Provider((ref) => VideoClient(ref.read)); // to have a single instance of your VideoClient across all your app
现在,当您想上传视频或使用 VideoClient 执行特定操作时,您可以从应用程序的任何位置调用此提供程序
RaisedButton(
onTap: () {
context.read(VideoProvider).upload(); //or whatever method you use to initilize an action
}
);
关于Flutter Riverpod 在没有上下文的情况下设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65217768/
我有一个应用程序,需要在提要屏幕上显示视频上传进度指示器。返回上传进度的代码位于视频客户端类中,该类不在 Feed 屏幕的小部件树中,并且在视频开始上传时,Feed 屏幕甚至没有打开。 我想要做的是使
我正在尝试学习 Riverpod,我有一个 ChangeNotifierProvider,它有一些字段需要使用从异步操作返回的值进行初始化。这可能吗,据我所知,我无法异步创建 ChangeNotifi
我一直在尝试使用从我的auth Provider获得的uid创建流到Firestore文档的流: class AuthService { ... static final provider =
我有这个片段: final countProvider = StateProvider((ref) { return 0; }); class CountWidget extends Consum
我有这个片段: final countProvider = StateProvider((ref) { return 0; }); class CountWidget extends Consum
我有两个 StateNotifierProvider,想在一个小部件中监听这两个状态变化。我能想到的一种方法是嵌套两个 ProviderListener。但是,如果在 Bloc 包中有一个类似于 Mu
我正在尝试联系 Riverpod,但遇到了一些问题。 我创建了一个用于登录用户的表单,我试图在用户登录时更改主视图。我的问题是,当我设置更改状态并导航回应用程序根目录时,新状态似乎不可用。但是,如果我
我正在学习 Flutter。大多数教程使用 Provider 包,但 Youtube 上的其他一些教程使用 GetX。我搜索了一下,发现似乎还有其他软件包,如 Bloc、Riverpod 等。 我一头
我习惯于调用提供者的 Provider.of() 来从小部件树的其他位置获取提供者,但我发现的每个 Riverpod 资源都依赖于对提供者变量的访问权限(通过将两个小部件放在同一个文件中)。对于仅通过
假设我想通过使用 TextFormField 上的 initialValue: 属性来初始化文本字段,并且我需要来自提供者的初始值。我在 docs 上阅读从 build 方法内部调用 read() 被
我编写了一些代码,为 StateNotifier 提供 ApiService。 ApiService 依赖于 authenticatorclient - auth 客户端必须异步创建,因为它使用 sh
我正在开发一个新的应用程序并使用状态通知器测试 Riverpod,并且有一个关于在构建页面时可以在哪里加载初始数据的问题。 我有以下状态类: abstract class SalesOrderList
当我点击他们网页上的后退按钮时,我在 StateNotifiers 中收到此错误。我已经将它隔离到发生在 longRunningAPI 的地方请求如下。 Exception has occurred.
我正在使用提供程序进行状态管理(实际上是 riverpod )在我的项目中,我有一个选项卡 View 并将每个选项卡用于一个类别,每个选项卡都显示新闻列表。 tabview 大小不固定,我对所有选项卡
我正在使用提供程序进行状态管理(实际上是 riverpod )在我的项目中,我有一个选项卡 View 并将每个选项卡用于一个类别,每个选项卡都显示新闻列表。 tabview 大小不固定,我对所有选项卡
我在提供程序中有多个值(在类中),当我在提供程序中使用 autoDispose 修饰符时,我只想处理提供程序中的几个值是否可以这样做? 我已在互联网上搜索过此内容,但没有找到与此要求相关的任何资源。
我想手动覆盖我的 StateNotifierProvider 状态以进行测试。可以使用 ProviderContainer 或 ProviderScope 覆盖提供程序。但它只提供覆盖通知程序的选项,
在使用 Riverpod 作为我的状态管理工具时,我一直在使用我发现的反模式。我做了用户问的this question did: 更新你想改变的属性并添加state = state。这个解决方案一直有
我有一个非常大、复杂的应用程序,其中包含许多页面,其中包含带有大量字段(文本、日期选择、组合框等)的输入表单,因此状态相当大。我正在从 Provider 切换到 Riverpod,建议的状态管理方式似
我有一个 StateNotifierProvider这取决于 FutureProvider .目前它们如下所示。 final catalogProvider = StateNotifierProvid
我是一名优秀的程序员,十分优秀!