Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions flutter_readium/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,7 @@ Future<void> main() async {
return bloc;
},
),
// BlocProvider(
// create: (final _) => TtsSettingsBloc(),
// lazy: false,
// ),
BlocProvider(create: (final _) => TtsSettingsBloc(), lazy: false),
BlocProvider(create: (final _) => PlayerControlsBloc()),
],
child: MyApp(),
Expand Down
29 changes: 13 additions & 16 deletions flutter_readium/example/lib/pages/player.page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -65,24 +65,21 @@ class _PlayerPageState extends State<PlayerPage> with RestorationMixin {
);

List<Widget> _buildActionButtons() => <Widget>[
// IconButton(
// icon: const Icon(Icons.headphones),
// onPressed: () {
// context.read<TtsSettingsBloc>().add(GetTtsVoicesEvent());
IconButton(
icon: const Icon(Icons.headphones),
onPressed: () {
context.read<TtsSettingsBloc>().add(GetTtsVoicesEvent());

// final pubLang =
// context.read<PublicationBloc>().state.publication?.metadata.language ?? ['en'];
final pubLang = context.read<PublicationBloc>().state.publication?.metadata.languages ?? ['en'];

// showModalBottomSheet(
// context: context,
// isScrollControlled: true,
// builder: (final context) => TtsSettingsWidget(
// pubLang: pubLang,
// ),
// );
// },
// tooltip: 'Open tts settings',
// ),
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (final context) => TtsSettingsWidget(pubLang: pubLang),
);
},
tooltip: 'Open tts settings',
),
IconButton(
icon: const Icon(Icons.format_paint),
onPressed: () {
Expand Down
50 changes: 36 additions & 14 deletions flutter_readium/example/lib/state/player_controls_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,63 +8,85 @@ import 'package:collection/collection.dart';

import 'package:flutter_readium/flutter_readium.dart';

abstract class PlayerControlsEvent {}
@immutable
abstract class PlayerControlsEvent {
const PlayerControlsEvent();
}

@immutable
class PlayTTS extends PlayerControlsEvent {
PlayTTS({this.fromLocator});
const PlayTTS({this.fromLocator, this.ttsPreferences});

final Locator? fromLocator;
final TTSPreferences? ttsPreferences;
}

@immutable
class Play extends PlayerControlsEvent {
Play({this.fromLocator});
const Play({this.fromLocator, this.audioPreferences});

final Locator? fromLocator;
final AudioPreferences? audioPreferences;
}

@immutable
class Pause extends PlayerControlsEvent {}

@immutable
class Stop extends PlayerControlsEvent {}

@immutable
class TogglePlayingState extends PlayerControlsEvent {
TogglePlayingState({required this.isPlaying});
bool isPlaying;
const TogglePlayingState({required this.isPlaying});
final bool isPlaying;
}

class SkipToNext extends PlayerControlsEvent {}
@immutable
class SkipToNext extends PlayerControlsEvent {
const SkipToNext();
}

class SkipToPrevious extends PlayerControlsEvent {}
@immutable
class SkipToPrevious extends PlayerControlsEvent {
const SkipToPrevious();
}

@immutable
class SkipToNextChapter extends PlayerControlsEvent {
SkipToNextChapter({required this.publication});
const SkipToNextChapter({required this.publication});
final Publication publication;
}

@immutable
class SkipToPreviousChapter extends PlayerControlsEvent {
SkipToPreviousChapter({required this.publication});
const SkipToPreviousChapter({required this.publication});
final Publication publication;
}

@immutable
class SkipToNextPage extends PlayerControlsEvent {}

@immutable
class SkipToPreviousPage extends PlayerControlsEvent {}

@immutable
class GoToLocator extends PlayerControlsEvent {
GoToLocator(this.locator);
const GoToLocator(this.locator);

final Locator locator;
}

class GetAvailableVoices extends PlayerControlsEvent {}

@immutable
class UpdateCurrentTocHref extends PlayerControlsEvent {
UpdateCurrentTocHref(this.tocHref);
const UpdateCurrentTocHref(this.tocHref);

final String tocHref;
}

class PlayerControlsState {
PlayerControlsState({
const PlayerControlsState({
required this.playing,
required this.ttsEnabled,
required this.audioEnabled,
Expand Down Expand Up @@ -147,7 +169,7 @@ class PlayerControlsBloc extends Bloc<PlayerControlsEvent, PlayerControlsState>

on<PlayTTS>((final event, final emit) async {
if (!state.ttsEnabled) {
await instance.ttsEnable(TTSPreferences(speed: 1.2));
await instance.ttsEnable(event.ttsPreferences ?? TTSPreferences(speed: 1.2));
await instance.play(event.fromLocator);
emit(state.toggleTTSEnabled(true, event.fromLocator?.locations?.tocHref));
} else {
Expand All @@ -158,7 +180,7 @@ class PlayerControlsBloc extends Bloc<PlayerControlsEvent, PlayerControlsState>
on<Play>((final event, final emit) async {
if (!state.audioEnabled) {
await instance.audioEnable(
prefs: AudioPreferences(speed: 1.5, seekInterval: 10),
prefs: event.audioPreferences ?? AudioPreferences(speed: 1.5, seekInterval: 10),
fromLocator: event.fromLocator,
);
emit(state.toggleAudioEnabled(true, event.fromLocator?.locations?.tocHref));
Expand Down
Loading