【问题标题】:Migrating to bloc 8.0.1 from 3.x, getting depreciated errors从 3.x 迁移到 bloc 8.0.1,出现折旧错误
【发布时间】:2022-06-28 01:52:54
【问题描述】:

我已从 bloc 3.x 版本更新到 8.0.1,但我对 bloc 还很陌生。我已经阅读了基础知识并对其进行了一些编辑,但现在我被困住了。

这是我的事件、集团和状态文件。如何将其转换为与 bloc 8.0.1 兼容的代码。

player_bloc.dart

import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';
import 'package:online_radio/radio/radio_player.dart';
import 'package:online_radio/radio/radio_state.dart';
import 'package:online_radio/station.dart';

part 'player_event.dart';
part 'player_state.dart';

class PlayerBloc extends Bloc<PlayerEvent, PlayerState> {
  final RadioPlayer radioPlayer;

  PlayerBloc({@required this.radioPlayer})
      : assert(radioPlayer != null),
        super(StoppedState()) {
    on<PauseEvent>(
      ((event, emit) async{
        
      })
    );
    on<PlayEvent>(
      ((event, emit) async{
        
      })
    );
    
    
    radioPlayer.radioStateStream.listen((radioState) {
      if (radioState == RadioState.PLAYING && state is PausedState) {
        this.add(PlayEvent((state as PausedState).currentStation));
      }
    });
  }


  @override
  Stream<PlayerState> mapEventToState(PlayerEvent event) async* {
    if (event is PlayEvent) {
      yield* _handlePlayEvent(event);
    } else if (event is PauseEvent) {
      yield* _handlePauseEvent(event);
    }
  }

  Stream<PlayerState> _handlePlayEvent(PlayEvent playEvent) async* {
    if (state is StoppedState) {
      _playNewRadioStation(playEvent);
      yield PlayingState(playEvent.station);
    } else if (state is PausedState) {
      if ((state as PausedState).currentStation != playEvent.station) {
        _playNewRadioStation(playEvent);
      } else {
        _playExistingRadioStation();
      }
      yield PlayingState(playEvent.station);
    } else if (state is PlayingState) {
      if ((state as PlayingState).currentStation != playEvent.station) {
        _playNewRadioStation(playEvent);
      } else {
        _playExistingRadioStation();
      }
      yield PlayingState(playEvent.station);
    }
  }

  Stream<PlayerState> _handlePauseEvent(PauseEvent pauseEvent) async* {
    if (state is PlayingState) {
      radioPlayer.pause();
      yield PausedState((state as PlayingState).currentStation);
    }
  }

  void _playExistingRadioStation() {
    radioPlayer.play();
  }

  void _playNewRadioStation(PlayEvent playEvent) {
    radioPlayer.setUrl(playEvent.station.radioUrl).then((_) {
      radioPlayer.play();
    });
  }
}

player_state.dart

part of 'player_bloc.dart';

@immutable
abstract class PlayerState extends Equatable {
  const PlayerState();

  @override
  List<Object> get props => [];
}

class StoppedState extends PlayerState {}

class PlayingState extends PlayerState {
  final Station currentStation;

  PlayingState(this.currentStation);
}

class PausedState extends PlayerState {
  final Station currentStation;

  PausedState(this.currentStation);
}

player_event.dart

part of 'player_bloc.dart';

@immutable
abstract class PlayerEvent extends Equatable {
  const PlayerEvent();

  @override
  List<Object> get props => [];
}

class PlayEvent extends PlayerEvent {
  final Station station;
  PlayEvent(this.station);

  @override
  List<Object> get props => [];
}

class PauseEvent extends PlayerEvent {}

这是我到现在为止的进步。之后我该怎么做?

【问题讨论】:

    标签: java flutter bloc flutter-bloc


    【解决方案1】:

    player_state.dartplayer_event.dart 不变

    尝试更改此 player_bloc.dart 文件:

    import 'dart:async';
    
    import 'package:bloc/bloc.dart';
    import 'package:equatable/equatable.dart';
    import 'package:meta/meta.dart';
    import 'package:online_radio/radio/radio_player.dart';
    import 'package:online_radio/radio/radio_state.dart';
    import 'package:online_radio/station.dart';
    
    part 'player_event.dart';
    part 'player_state.dart';
    
    class PlayerBloc extends Bloc<PlayerEvent, PlayerState> {
      final RadioPlayer radioPlayer;
    
      PlayerBloc({@required this.radioPlayer})
          : assert(radioPlayer != null),
            super(StoppedState()) {
        on<PauseEvent>(_onPause);
        on<PlayEvent>(_onPlay);
    
    
        radioPlayer.radioStateStream.listen((radioState) {
          if (radioState == RadioState.PLAYING && state is PausedState) {
            this.add(PlayEvent((state as PausedState).currentStation));
          }
        });
      }
    
      void _onPause(
          PauseEvent event,
          Emitter<PlayerState> emit,
          ) async {
        if(state is PlayingState){
          radioPlayer.pause();
          emit(PausedState((state as PlayingState).currentStation));
        }
      }
    
      void _onPlay(
          PlayEvent event,
          Emitter<PlayerState> emit,
          ) async {
        if (state is StoppedState) {
          _playNewRadioStation(playEvent);
          emit(PlayingState(playEvent.station));
        } else if (state is PausedState) {
          if ((state as PausedState).currentStation != playEvent.station) {
            _playNewRadioStation(playEvent);
          } else {
            _playExistingRadioStation();
          }
          emit(PlayingState(playEvent.station));
        } else if (state is PlayingState) {
          if ((state as PlayingState).currentStation != playEvent.station) {
            _playNewRadioStation(playEvent);
          } else {
            _playExistingRadioStation();
          }
          emit(PlayingState(playEvent.station));
        }
      }
    
      void _playExistingRadioStation() {
        radioPlayer.play();
      }
    
      void _playNewRadioStation(PlayEvent playEvent) {
        radioPlayer.setUrl(playEvent.station.radioUrl).then((_) {
          radioPlayer.play();
        });
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      相关资源
      最近更新 更多