0

我的直播有问题。我在项目中有一个活动的 StreamController.broadcast() 用于 2 个不同的屏幕。我在这个 Stream 上有一个监听方法,所以当存储在其中的值发生变化时,组件将使用新值进行更新。但是,即使听了,只修改一次后,Stream 就不再工作了(我可以向它添加值,但组件不再更新)

我的直播

StreamController<String> userProfilePhotoController = StreamController.broadcast();

“聆听”方法

此方法在initState方法中调用。

profilePhotoListen() {
 controller.userProfilePhotoController.stream.listen(
  (e) => setState(() {
    //This is basically a 'print' function
    Log.log(e, name: "AVATAR PATH");
  }),
 );
}

在 Stream 上设置值的方法

setProfileAvatar({required String path}) {
  userProfilePhotoController.sink.add(path);
  userProfilePhoto = path;
}

当第一次调用 setProfileAvatar({required String path})时,Stream 接收到值并且我的组件更新没有问题。但是当第二次调用该方法时,Stream 会收到该值,但组件不会更新。

组件

StreamBuilder<String>(
  stream: controller.userProfilePhotoController.stream,
  builder: (context, snapshot) {
    if (snapshot.hasData && snapshot.data != null) {
      return RegisterAvatar(
         path: snapshot.data!,
         onTap: () => Modular.to.pushNamed(
             '.$kRouteRegisterProfilePicture'),
           );
     }
     return RegisterAvatarPlaceholder(
       onTap: () => Modular.to
          .pushNamed('.$kRouteRegisterProfilePicture'),
       );
     },
),
4

0 回答 0