如何使用 Flutter Riverpod 将有针对性的通知发送到小部件?

问题描述 投票:0回答:1

我的 Flutter 应用程序有大量微小的 Stateful Widget。我想向其中之一发送通知,并使其改变状态。 Riverpod(或任何其他通知系统,如 Value Change Notifier 或 Streams)向特定小部件发送消息的确切机制是什么?我可以为每个小部件分配一个自定义 ID,或者使用全局唯一的密钥来识别它们。

如果您需要一些背景信息:我的应用程序有一个带有 100 个灯的监控面板,类似于物理 LED,在屏幕上排列成 10x10 矩阵。这些是基于头像的自定义小部件。每个灯代表一种状态(开/关)或错误情况。当物理世界中的传感器发出警报时,相应的小部件会收到通知,并且 UI 上的灯会发出红光。

我认为我不应该创建 100 个 Riverpod Notifier-Provider 对象。但如果只有一个通知程序,它将调用所有 100 个小部件的

build()
方法,这不是目标。我想告诉 Riverpod 这样的信息:“您的状态已更改。新值是
{'lamp_id' : 42, 'status' : 'on' }
。但仅将此通知发送到 42 号灯,而不是其他 99 个小部件。”

我没有像 Firebase 推送通知这样的服务器端基础设施。请建议任何仅限客户端的解决方案。

flutter notifications riverpod
1个回答
0
投票

您可以为此创建一个基于家庭类别的提供者。将

id
参数添加到基于类的提供程序的
build
方法。

@riverpod
class LampStatus extends _$LampStatus {
  @override
  bool build(int id) => false;

  turnOn() {
    state = true;
  }
}

在您的灯小部件中,像这样观看提供商:

@override
Widget build(BuildContext context, WidgetRef ref) {
  final status = ref.watch(lampStatusProvider(id));
  
  // ...
}

这样,每个灯小部件都会有自己的提供程序,即使您只定义了一次提供程序。

© www.soinside.com 2019 - 2024. All rights reserved.