侦听器中未收到颤振块屈服状态

时间:2021-03-30 07:40:57

标签: ios flutter dart bloc

我在弹出一个 CupertinoModalPopup 后立即向 bloc 添加一个事件。但是产生一个状态并且在 bloc 侦听器中没有收到。代码如下。还有更多的状态和事件,除了没有收到这个状态外,一切都在工作。我不知道为什么,也许是因为我在 showCupertinoModalPopup 流行之后添加了事件。我不确定。我这里没有粘贴全部代码,我只保留了相关代码。我确实在 yield ProfileUploadAvatarSucceed(user) 上设置了断点,它停在这里。

BlocBuilder<ProfileBloc, ProfileState>(
  builder: (context, state) {
    return GestureDetector(
      onTap: () async {
        final file = await showCupertinoModalPopup(
            context: context,
            builder: (popupContent) {
              return CupertinoActionSheet(
                actions: [
                  CupertinoActionSheetAction(
                    child: Text('Photo Library'),
                    onPressed: () async {
                      final imageFile = await _picker.getImage(
                          source: ImageSource.gallery,
                          imageQuality: 70,
                          maxWidth: 480);
                      if (imageFile != null) {
                        Navigator.of(context).pop(imageFile);
                      }
                    },
                  ),
                ],
              );
            });
        BlocProvider.of<ProfileBloc>(context).add(UploadAvatarEvent(file));
    };
  },
  listener: (_, state) {
    if (state is ProfileLoadingState) {
      BotToast.showLoading();
    } else if (state is ProfileUploadAvatarSucceed) {
      BotToast.closeAllLoading();
      BotToast.showText(text: 'Avatar updated');
    }
  }
);

ProfileBloc.dart

@override
Stream<ProfileState> mapEventToState(
  ProfileEvent event,
) async* {
  if (event is UploadAvatarEvent) {
    yield ProfileLoadingState();
    await _apiProvider.updateUser(currentUser.id, payload);
    final user = await _apiProvider.getUser(currentUser.id);
    yield ProfileUploadAvatarSucceed(user);
  }
}

0 个答案:

没有答案