Search code examples
javaflutterblocflutter-bloc

Migrating to bloc 8.0.1 from 3.x, getting depreciated errors


I have updated from bloc 3.x version to 8.0.1 but I am fairly new to bloc. I have read down the basics and edited some of it but I am stuck now.

This is my events, bloc and state file. How can I convert it to code compatible with 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 {}

This is the progress i have made up til now. how do i proceed after this?


Solution

  • player_state.dart and player_event.dart not change

    Try change this player_bloc.dart file:

    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();
        });
      }
    }