From 5e83cad40cdfcb7ae69cc1cda1140bccd0ba5a19 Mon Sep 17 00:00:00 2001 From: Michael Speed Date: Sat, 17 Dec 2022 19:36:04 +0100 Subject: [PATCH] New Folder screen and player screen --- assets/images/texture.png | Bin 170883 -> 0 bytes lib/audioplayer/medito_audio_handler.dart | 24 +- lib/main.dart | 9 +- lib/network/folder/folder_items_repo.dart | 1 + lib/network/folder/folder_provider.dart | 41 + lib/network/folder/new_folder_response.dart | 45 ++ .../folder/new_folder_response.freezed.dart | 765 ++++++++++++++++++ lib/network/folder/new_folder_response.g.dart | 64 ++ lib/network/folder/new_folder_screen.dart | 205 +++++ lib/network/home/courses_repo.dart | 3 +- lib/network/home/daily_message_repo.dart | 3 +- lib/network/home/home_repo.dart | 5 +- lib/network/home/shortcuts_repo.dart | 5 +- lib/network/http_get.dart | 2 +- lib/network/packs/announcement_bloc.dart | 1 + lib/network/packs/announcement_repo.dart | 3 +- lib/network/packs/packs_repo.dart | 7 +- lib/network/player/player_bloc.dart | 3 + lib/network/player/player_repo.dart | 25 +- .../session_options/session_options_bloc.dart | 4 +- .../session_options/session_options_repo.dart | 2 + lib/network/text/text_bloc.dart | 4 +- lib/network/text/text_repo.dart | 3 +- lib/utils/bgvolume_utils.dart | 14 + lib/utils/colors.dart | 3 + lib/utils/navigation_extra.dart | 36 +- lib/widgets/home/home_wrapper_widget.dart | 41 +- .../background_sounds_sheet_widget.dart | 5 +- .../player/player2/new_player_widget.dart | 327 ++++++++ .../player/player2/player_widget_2.dart | 380 --------- lib/widgets/player/player_button.dart | 49 -- .../player/position_indicator_widget.dart | 191 ++++- pubspec.yaml | 9 +- 33 files changed, 1761 insertions(+), 518 deletions(-) delete mode 100644 assets/images/texture.png create mode 100644 lib/network/folder/folder_provider.dart create mode 100644 lib/network/folder/new_folder_response.dart create mode 100644 lib/network/folder/new_folder_response.freezed.dart create mode 100644 lib/network/folder/new_folder_response.g.dart create mode 100644 lib/network/folder/new_folder_screen.dart create mode 100644 lib/widgets/player/player2/new_player_widget.dart delete mode 100644 lib/widgets/player/player2/player_widget_2.dart delete mode 100644 lib/widgets/player/player_button.dart diff --git a/assets/images/texture.png b/assets/images/texture.png deleted file mode 100644 index 2e887b726f72a2f51e2857aecb6e0709c9689cad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170883 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

?h}VT{e+&9EkMs4+4PPK)5rz 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 play() async { try { - if (_currentlyPlayingBGSound.isNotEmptyAndNotNull()) { + if (_currentlyPlayingBGSound.isNotEmptyAndNotNull() && mediaItemHasBGSound()) { unawaited(_bgPlayer.play()); unawaited(_bgPlayer.setLoopMode(LoopMode.all)); } @@ -203,7 +204,26 @@ class MeditoAudioHandler extends BaseAudioHandler Future _setBgVolumeFadeAtEnd(int timeLeft) async { print(_bgPlayer.volume - (_bgVolume / FADE_DURATION)); if (_bgPlayer.volume > 0) { - unawaited(_bgPlayer.setVolume(_bgPlayer.volume - (_bgVolume / FADE_DURATION))); + unawaited( + _bgPlayer.setVolume(_bgPlayer.volume - (_bgVolume / FADE_DURATION))); } } + + void skipForward30Secs() { + var seekDuration = min(_duration?.inMilliseconds ?? 0, + _player.position.inMilliseconds + Duration(seconds: 30).inMilliseconds); + _player.seek(Duration(milliseconds: seekDuration)); + } + + void skipBackward10Secs() { + var seekDuration = max(0, + _player.position.inMilliseconds - Duration(seconds: 10).inMilliseconds); + _player.seek(Duration(milliseconds: seekDuration)); + } + + void setPlayerSpeed(double speed) => _player.setSpeed(speed); + + bool mediaItemHasBGSound() => mediaItem.value?.extras?[HAS_BG_SOUND]; + } + diff --git a/lib/main.dart b/lib/main.dart index 9f250fad..b084e7cb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -24,12 +24,12 @@ import 'package:audio_service/audio_service.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'audioplayer/audio_inherited_widget.dart'; import 'network/auth.dart'; -import 'utils/colors.dart'; late SharedPreferences sharedPreferences; @@ -62,7 +62,12 @@ Future main() async { } } -void _runApp(MeditoAudioHandler _audioHandler) => runApp(AudioHandlerInheritedWidget(audioHandler: _audioHandler, child: ParentWidget())); +void _runApp(MeditoAudioHandler _audioHandler) => runApp(ProviderScope( + child: AudioHandlerInheritedWidget( + audioHandler: _audioHandler, + child: ParentWidget(), + ), + )); /// This Widget is the main application widget. class ParentWidget extends StatefulWidget { diff --git a/lib/network/folder/folder_items_repo.dart b/lib/network/folder/folder_items_repo.dart index d5f4611a..c345c942 100644 --- a/lib/network/folder/folder_items_repo.dart +++ b/lib/network/folder/folder_items_repo.dart @@ -26,6 +26,7 @@ class FolderItemsRepository { try { final response = await httpGet(BASE_URL + ext + id + folderParameters, fileNameForCache: BASE_URL + id + '/' + ext, skipCache: skipCache); + if(response == null) return null; return FolderResponse.fromJson(response); } catch (e) { print(e); diff --git a/lib/network/folder/folder_provider.dart b/lib/network/folder/folder_provider.dart new file mode 100644 index 00000000..643dfdbd --- /dev/null +++ b/lib/network/folder/folder_provider.dart @@ -0,0 +1,41 @@ +import 'package:Medito/network/http_get.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; + +import '../auth.dart'; +import 'new_folder_response.dart'; + +var folderParameters = + '?fields=*,items.item:folders.id,items.item:folders.type,items.item:folders.title,items.item:folders.subtitle,items.item:sessions.id,items.item:sessions.type,items.item:sessions.title,items.item:sessions.subtitle,items.item:sessions.old_id,items.item:dailies.id,items.item:dailies.type,items.item:dailies.title,items.item:dailies.subtitle,items.item:articles.id,items.item:articles.type,items.item:articles.title,items.item:articles.subtitle&deep[items][_sort]=position'; +var ext = 'items/folders/'; + +final folderProvider = + FutureProvider.family((ref, id) async { + if (id == null) { + throw Exception('Id is null'); + } + final skipCache = ref.watch(folderSkipCacheProvider); + final content = await _httpGet(id, skipCache); + + if(content == null) return null; + return NewFolderResponse.fromJson(content); +}); + +final folderProviderSkipCache = + FutureProvider.family((ref, id) async { + final content = await _httpGet(id, true); + + if(content == null) return null; + + return NewFolderResponse.fromJson(content); +}); + +Future?> _httpGet(String id, bool skipCache) { + return httpGet( + BASE_URL + ext + id + folderParameters, + fileNameForCache: BASE_URL + id + '/' + ext, + skipCache: skipCache, + ); +} + +final folderSkipCacheProvider = StateProvider((ref) => false); diff --git a/lib/network/folder/new_folder_response.dart b/lib/network/folder/new_folder_response.dart new file mode 100644 index 00000000..fa1c4e8f --- /dev/null +++ b/lib/network/folder/new_folder_response.dart @@ -0,0 +1,45 @@ +import 'package:flutter/foundation.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'new_folder_response.freezed.dart'; +part 'new_folder_response.g.dart'; + +@freezed +class NewFolderResponse with _$NewFolderResponse { + const factory NewFolderResponse({ + required Data? data, + }) = _NewFolderResponse; + + factory NewFolderResponse.fromJson(Map json) => + _$NewFolderResponseFromJson(json); +} + +@freezed +class Data with _$Data { + const factory Data( + {int? id, + String? title, + String? subtitle, + String? description, + List? items}) = _Data; + + factory Data.fromJson(Map json) => _$DataFromJson(json); +} + +@freezed +class FolderItem with _$FolderItem { + const factory FolderItem({ + Item? item, + }) = _FolderItem; + + factory FolderItem.fromJson(Map json) => + _$FolderItemFromJson(json); +} + +@freezed +class Item with _$Item { + const factory Item({int? id, String? type, String? title, String? subtitle}) = + _Item; + + factory Item.fromJson(Map json) => _$ItemFromJson(json); +} diff --git a/lib/network/folder/new_folder_response.freezed.dart b/lib/network/folder/new_folder_response.freezed.dart new file mode 100644 index 00000000..36c706d9 --- /dev/null +++ b/lib/network/folder/new_folder_response.freezed.dart @@ -0,0 +1,765 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target + +part of 'new_folder_response.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); + +NewFolderResponse _$NewFolderResponseFromJson(Map json) { + return _NewFolderResponse.fromJson(json); +} + +/// @nodoc +mixin _$NewFolderResponse { + Data? get data => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $NewFolderResponseCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $NewFolderResponseCopyWith<$Res> { + factory $NewFolderResponseCopyWith( + NewFolderResponse value, $Res Function(NewFolderResponse) then) = + _$NewFolderResponseCopyWithImpl<$Res, NewFolderResponse>; + @useResult + $Res call({Data? data}); + + $DataCopyWith<$Res>? get data; +} + +/// @nodoc +class _$NewFolderResponseCopyWithImpl<$Res, $Val extends NewFolderResponse> + implements $NewFolderResponseCopyWith<$Res> { + _$NewFolderResponseCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? data = freezed, + }) { + return _then(_value.copyWith( + data: freezed == data + ? _value.data + : data // ignore: cast_nullable_to_non_nullable + as Data?, + ) as $Val); + } + + @override + @pragma('vm:prefer-inline') + $DataCopyWith<$Res>? get data { + if (_value.data == null) { + return null; + } + + return $DataCopyWith<$Res>(_value.data!, (value) { + return _then(_value.copyWith(data: value) as $Val); + }); + } +} + +/// @nodoc +abstract class _$$_NewFolderResponseCopyWith<$Res> + implements $NewFolderResponseCopyWith<$Res> { + factory _$$_NewFolderResponseCopyWith(_$_NewFolderResponse value, + $Res Function(_$_NewFolderResponse) then) = + __$$_NewFolderResponseCopyWithImpl<$Res>; + @override + @useResult + $Res call({Data? data}); + + @override + $DataCopyWith<$Res>? get data; +} + +/// @nodoc +class __$$_NewFolderResponseCopyWithImpl<$Res> + extends _$NewFolderResponseCopyWithImpl<$Res, _$_NewFolderResponse> + implements _$$_NewFolderResponseCopyWith<$Res> { + __$$_NewFolderResponseCopyWithImpl( + _$_NewFolderResponse _value, $Res Function(_$_NewFolderResponse) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? data = freezed, + }) { + return _then(_$_NewFolderResponse( + data: freezed == data + ? _value.data + : data // ignore: cast_nullable_to_non_nullable + as Data?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$_NewFolderResponse + with DiagnosticableTreeMixin + implements _NewFolderResponse { + const _$_NewFolderResponse({required this.data}); + + factory _$_NewFolderResponse.fromJson(Map json) => + _$$_NewFolderResponseFromJson(json); + + @override + final Data? data; + + @override + String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { + return 'NewFolderResponse(data: $data)'; + } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties + ..add(DiagnosticsProperty('type', 'NewFolderResponse')) + ..add(DiagnosticsProperty('data', data)); + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_NewFolderResponse && + (identical(other.data, data) || other.data == data)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, data); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$_NewFolderResponseCopyWith<_$_NewFolderResponse> get copyWith => + __$$_NewFolderResponseCopyWithImpl<_$_NewFolderResponse>( + this, _$identity); + + @override + Map toJson() { + return _$$_NewFolderResponseToJson( + this, + ); + } +} + +abstract class _NewFolderResponse implements NewFolderResponse { + const factory _NewFolderResponse({required final Data? data}) = + _$_NewFolderResponse; + + factory _NewFolderResponse.fromJson(Map json) = + _$_NewFolderResponse.fromJson; + + @override + Data? get data; + @override + @JsonKey(ignore: true) + _$$_NewFolderResponseCopyWith<_$_NewFolderResponse> get copyWith => + throw _privateConstructorUsedError; +} + +Data _$DataFromJson(Map json) { + return _Data.fromJson(json); +} + +/// @nodoc +mixin _$Data { + int? get id => throw _privateConstructorUsedError; + String? get title => throw _privateConstructorUsedError; + String? get subtitle => throw _privateConstructorUsedError; + String? get description => throw _privateConstructorUsedError; + List? get items => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $DataCopyWith get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $DataCopyWith<$Res> { + factory $DataCopyWith(Data value, $Res Function(Data) then) = + _$DataCopyWithImpl<$Res, Data>; + @useResult + $Res call( + {int? id, + String? title, + String? subtitle, + String? description, + List? items}); +} + +/// @nodoc +class _$DataCopyWithImpl<$Res, $Val extends Data> + implements $DataCopyWith<$Res> { + _$DataCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? id = freezed, + Object? title = freezed, + Object? subtitle = freezed, + Object? description = freezed, + Object? items = freezed, + }) { + return _then(_value.copyWith( + id: freezed == id + ? _value.id + : id // ignore: cast_nullable_to_non_nullable + as int?, + title: freezed == title + ? _value.title + : title // ignore: cast_nullable_to_non_nullable + as String?, + subtitle: freezed == subtitle + ? _value.subtitle + : subtitle // ignore: cast_nullable_to_non_nullable + as String?, + description: freezed == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String?, + items: freezed == items + ? _value.items + : items // ignore: cast_nullable_to_non_nullable + as List?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$_DataCopyWith<$Res> implements $DataCopyWith<$Res> { + factory _$$_DataCopyWith(_$_Data value, $Res Function(_$_Data) then) = + __$$_DataCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {int? id, + String? title, + String? subtitle, + String? description, + List? items}); +} + +/// @nodoc +class __$$_DataCopyWithImpl<$Res> extends _$DataCopyWithImpl<$Res, _$_Data> + implements _$$_DataCopyWith<$Res> { + __$$_DataCopyWithImpl(_$_Data _value, $Res Function(_$_Data) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? id = freezed, + Object? title = freezed, + Object? subtitle = freezed, + Object? description = freezed, + Object? items = freezed, + }) { + return _then(_$_Data( + id: freezed == id + ? _value.id + : id // ignore: cast_nullable_to_non_nullable + as int?, + title: freezed == title + ? _value.title + : title // ignore: cast_nullable_to_non_nullable + as String?, + subtitle: freezed == subtitle + ? _value.subtitle + : subtitle // ignore: cast_nullable_to_non_nullable + as String?, + description: freezed == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String?, + items: freezed == items + ? _value._items + : items // ignore: cast_nullable_to_non_nullable + as List?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$_Data with DiagnosticableTreeMixin implements _Data { + const _$_Data( + {this.id, + this.title, + this.subtitle, + this.description, + final List? items}) + : _items = items; + + factory _$_Data.fromJson(Map json) => _$$_DataFromJson(json); + + @override + final int? id; + @override + final String? title; + @override + final String? subtitle; + @override + final String? description; + final List? _items; + @override + List? get items { + final value = _items; + if (value == null) return null; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { + return 'Data(id: $id, title: $title, subtitle: $subtitle, description: $description, items: $items)'; + } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties + ..add(DiagnosticsProperty('type', 'Data')) + ..add(DiagnosticsProperty('id', id)) + ..add(DiagnosticsProperty('title', title)) + ..add(DiagnosticsProperty('subtitle', subtitle)) + ..add(DiagnosticsProperty('description', description)) + ..add(DiagnosticsProperty('items', items)); + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_Data && + (identical(other.id, id) || other.id == id) && + (identical(other.title, title) || other.title == title) && + (identical(other.subtitle, subtitle) || + other.subtitle == subtitle) && + (identical(other.description, description) || + other.description == description) && + const DeepCollectionEquality().equals(other._items, _items)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, id, title, subtitle, description, + const DeepCollectionEquality().hash(_items)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$_DataCopyWith<_$_Data> get copyWith => + __$$_DataCopyWithImpl<_$_Data>(this, _$identity); + + @override + Map toJson() { + return _$$_DataToJson( + this, + ); + } +} + +abstract class _Data implements Data { + const factory _Data( + {final int? id, + final String? title, + final String? subtitle, + final String? description, + final List? items}) = _$_Data; + + factory _Data.fromJson(Map json) = _$_Data.fromJson; + + @override + int? get id; + @override + String? get title; + @override + String? get subtitle; + @override + String? get description; + @override + List? get items; + @override + @JsonKey(ignore: true) + _$$_DataCopyWith<_$_Data> get copyWith => throw _privateConstructorUsedError; +} + +FolderItem _$FolderItemFromJson(Map json) { + return _FolderItem.fromJson(json); +} + +/// @nodoc +mixin _$FolderItem { + Item? get item => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $FolderItemCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $FolderItemCopyWith<$Res> { + factory $FolderItemCopyWith( + FolderItem value, $Res Function(FolderItem) then) = + _$FolderItemCopyWithImpl<$Res, FolderItem>; + @useResult + $Res call({Item? item}); + + $ItemCopyWith<$Res>? get item; +} + +/// @nodoc +class _$FolderItemCopyWithImpl<$Res, $Val extends FolderItem> + implements $FolderItemCopyWith<$Res> { + _$FolderItemCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? item = freezed, + }) { + return _then(_value.copyWith( + item: freezed == item + ? _value.item + : item // ignore: cast_nullable_to_non_nullable + as Item?, + ) as $Val); + } + + @override + @pragma('vm:prefer-inline') + $ItemCopyWith<$Res>? get item { + if (_value.item == null) { + return null; + } + + return $ItemCopyWith<$Res>(_value.item!, (value) { + return _then(_value.copyWith(item: value) as $Val); + }); + } +} + +/// @nodoc +abstract class _$$_FolderItemCopyWith<$Res> + implements $FolderItemCopyWith<$Res> { + factory _$$_FolderItemCopyWith( + _$_FolderItem value, $Res Function(_$_FolderItem) then) = + __$$_FolderItemCopyWithImpl<$Res>; + @override + @useResult + $Res call({Item? item}); + + @override + $ItemCopyWith<$Res>? get item; +} + +/// @nodoc +class __$$_FolderItemCopyWithImpl<$Res> + extends _$FolderItemCopyWithImpl<$Res, _$_FolderItem> + implements _$$_FolderItemCopyWith<$Res> { + __$$_FolderItemCopyWithImpl( + _$_FolderItem _value, $Res Function(_$_FolderItem) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? item = freezed, + }) { + return _then(_$_FolderItem( + item: freezed == item + ? _value.item + : item // ignore: cast_nullable_to_non_nullable + as Item?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$_FolderItem with DiagnosticableTreeMixin implements _FolderItem { + const _$_FolderItem({this.item}); + + factory _$_FolderItem.fromJson(Map json) => + _$$_FolderItemFromJson(json); + + @override + final Item? item; + + @override + String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { + return 'FolderItem(item: $item)'; + } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties + ..add(DiagnosticsProperty('type', 'FolderItem')) + ..add(DiagnosticsProperty('item', item)); + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_FolderItem && + (identical(other.item, item) || other.item == item)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, item); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$_FolderItemCopyWith<_$_FolderItem> get copyWith => + __$$_FolderItemCopyWithImpl<_$_FolderItem>(this, _$identity); + + @override + Map toJson() { + return _$$_FolderItemToJson( + this, + ); + } +} + +abstract class _FolderItem implements FolderItem { + const factory _FolderItem({final Item? item}) = _$_FolderItem; + + factory _FolderItem.fromJson(Map json) = + _$_FolderItem.fromJson; + + @override + Item? get item; + @override + @JsonKey(ignore: true) + _$$_FolderItemCopyWith<_$_FolderItem> get copyWith => + throw _privateConstructorUsedError; +} + +Item _$ItemFromJson(Map json) { + return _Item.fromJson(json); +} + +/// @nodoc +mixin _$Item { + int? get id => throw _privateConstructorUsedError; + String? get type => throw _privateConstructorUsedError; + String? get title => throw _privateConstructorUsedError; + String? get subtitle => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $ItemCopyWith get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $ItemCopyWith<$Res> { + factory $ItemCopyWith(Item value, $Res Function(Item) then) = + _$ItemCopyWithImpl<$Res, Item>; + @useResult + $Res call({int? id, String? type, String? title, String? subtitle}); +} + +/// @nodoc +class _$ItemCopyWithImpl<$Res, $Val extends Item> + implements $ItemCopyWith<$Res> { + _$ItemCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? id = freezed, + Object? type = freezed, + Object? title = freezed, + Object? subtitle = freezed, + }) { + return _then(_value.copyWith( + id: freezed == id + ? _value.id + : id // ignore: cast_nullable_to_non_nullable + as int?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + title: freezed == title + ? _value.title + : title // ignore: cast_nullable_to_non_nullable + as String?, + subtitle: freezed == subtitle + ? _value.subtitle + : subtitle // ignore: cast_nullable_to_non_nullable + as String?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$_ItemCopyWith<$Res> implements $ItemCopyWith<$Res> { + factory _$$_ItemCopyWith(_$_Item value, $Res Function(_$_Item) then) = + __$$_ItemCopyWithImpl<$Res>; + @override + @useResult + $Res call({int? id, String? type, String? title, String? subtitle}); +} + +/// @nodoc +class __$$_ItemCopyWithImpl<$Res> extends _$ItemCopyWithImpl<$Res, _$_Item> + implements _$$_ItemCopyWith<$Res> { + __$$_ItemCopyWithImpl(_$_Item _value, $Res Function(_$_Item) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? id = freezed, + Object? type = freezed, + Object? title = freezed, + Object? subtitle = freezed, + }) { + return _then(_$_Item( + id: freezed == id + ? _value.id + : id // ignore: cast_nullable_to_non_nullable + as int?, + type: freezed == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as String?, + title: freezed == title + ? _value.title + : title // ignore: cast_nullable_to_non_nullable + as String?, + subtitle: freezed == subtitle + ? _value.subtitle + : subtitle // ignore: cast_nullable_to_non_nullable + as String?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$_Item with DiagnosticableTreeMixin implements _Item { + const _$_Item({this.id, this.type, this.title, this.subtitle}); + + factory _$_Item.fromJson(Map json) => _$$_ItemFromJson(json); + + @override + final int? id; + @override + final String? type; + @override + final String? title; + @override + final String? subtitle; + + @override + String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { + return 'Item(id: $id, type: $type, title: $title, subtitle: $subtitle)'; + } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties + ..add(DiagnosticsProperty('type', 'Item')) + ..add(DiagnosticsProperty('id', id)) + ..add(DiagnosticsProperty('type', type)) + ..add(DiagnosticsProperty('title', title)) + ..add(DiagnosticsProperty('subtitle', subtitle)); + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_Item && + (identical(other.id, id) || other.id == id) && + (identical(other.type, type) || other.type == type) && + (identical(other.title, title) || other.title == title) && + (identical(other.subtitle, subtitle) || + other.subtitle == subtitle)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash(runtimeType, id, type, title, subtitle); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$_ItemCopyWith<_$_Item> get copyWith => + __$$_ItemCopyWithImpl<_$_Item>(this, _$identity); + + @override + Map toJson() { + return _$$_ItemToJson( + this, + ); + } +} + +abstract class _Item implements Item { + const factory _Item( + {final int? id, + final String? type, + final String? title, + final String? subtitle}) = _$_Item; + + factory _Item.fromJson(Map json) = _$_Item.fromJson; + + @override + int? get id; + @override + String? get type; + @override + String? get title; + @override + String? get subtitle; + @override + @JsonKey(ignore: true) + _$$_ItemCopyWith<_$_Item> get copyWith => throw _privateConstructorUsedError; +} diff --git a/lib/network/folder/new_folder_response.g.dart b/lib/network/folder/new_folder_response.g.dart new file mode 100644 index 00000000..a3d1ec30 --- /dev/null +++ b/lib/network/folder/new_folder_response.g.dart @@ -0,0 +1,64 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'new_folder_response.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$_NewFolderResponse _$$_NewFolderResponseFromJson(Map json) => + _$_NewFolderResponse( + data: json['data'] == null + ? null + : Data.fromJson(json['data'] as Map), + ); + +Map _$$_NewFolderResponseToJson( + _$_NewFolderResponse instance) => + { + 'data': instance.data, + }; + +_$_Data _$$_DataFromJson(Map json) => _$_Data( + id: json['id'] as int?, + title: json['title'] as String?, + subtitle: json['subtitle'] as String?, + description: json['description'] as String?, + items: (json['items'] as List?) + ?.map((e) => FolderItem.fromJson(e as Map)) + .toList(), + ); + +Map _$$_DataToJson(_$_Data instance) => { + 'id': instance.id, + 'title': instance.title, + 'subtitle': instance.subtitle, + 'description': instance.description, + 'items': instance.items, + }; + +_$_FolderItem _$$_FolderItemFromJson(Map json) => + _$_FolderItem( + item: json['item'] == null + ? null + : Item.fromJson(json['item'] as Map), + ); + +Map _$$_FolderItemToJson(_$_FolderItem instance) => + { + 'item': instance.item, + }; + +_$_Item _$$_ItemFromJson(Map json) => _$_Item( + id: json['id'] as int?, + type: json['type'] as String?, + title: json['title'] as String?, + subtitle: json['subtitle'] as String?, + ); + +Map _$$_ItemToJson(_$_Item instance) => { + 'id': instance.id, + 'type': instance.type, + 'title': instance.title, + 'subtitle': instance.subtitle, + }; diff --git a/lib/network/folder/new_folder_screen.dart b/lib/network/folder/new_folder_screen.dart new file mode 100644 index 00000000..69e03ea1 --- /dev/null +++ b/lib/network/folder/new_folder_screen.dart @@ -0,0 +1,205 @@ +import 'package:Medito/network/folder/new_folder_response.dart'; +import 'package:Medito/utils/navigation_extra.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; + +import '../../utils/strings.dart'; +import '../../utils/utils.dart'; +import 'folder_provider.dart'; + +class NewFolderScreen extends ConsumerWidget { + const NewFolderScreen({Key? key, required this.id}) : super(key: key); + + final String? id; + + @override + Widget build(BuildContext context, WidgetRef ref) { + var value = ref.watch(folderProvider(id)); + return value.when( + data: (data) => buildScaffoldWithData(data, ref), + error: (err, stack) => Text(err.toString()), + loading: () => _buildLoadingWidget()); + } + + Widget _buildLoadingWidget() => + const Center(child: CircularProgressIndicator()); + + Scaffold buildScaffoldWithData(NewFolderResponse? folder, WidgetRef ref) { + return Scaffold( + body: RefreshIndicator( + onRefresh: () async { + ref.read(folderSkipCacheProvider.notifier).state = true; + }, + child: ListView( + children: [ + HeaderWidget(folder?.data?.title, folder?.data?.description, ''), + ListView.builder( + physics: NeverScrollableScrollPhysics(), + itemCount: folder?.data?.items?.length ?? 0, + shrinkWrap: true, + itemBuilder: (BuildContext context, int i) { + var title = folder?.data?.items?[i].item?.title; + var subtitle = folder?.data?.items?[i].item?.subtitle; + + return GestureDetector( + onTap: () => _onListItemTap(folder?.data?.items?[i].item?.id, + folder?.data?.items?[i].item?.type, ref.context), + child: _buildListTile(title, subtitle, true), + ); + }, + ) + ], + ), + ), + ); + } + + Widget _buildListTile(String? title, String? subtitle, bool showIcon) { + return Padding( + padding: const EdgeInsets.all(20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (title != null) Text(title), + if (subtitle != null) + Column(children: [ + Container(height: 8), + Text(subtitle), + ]) + ], + ), + showIcon ? Icon(_getIcon(), color: Colors.white) : Container() + ], + ), + ); + } + + void _onListItemTap(int? id, String? type, BuildContext context) { + checkConnectivity().then((value) { + if (value) { + var location = GoRouter.of(context).location; + if (type == 'folder') { + if (location.contains('folder2')) { + context.go(getPathFromString(Folder3Path, + [location.split('/')[2], this.id, id.toString()])); + } else { + context.go( + getPathFromString(Folder2Path, [this.id, id.toString()])); + } + } else { + context.go(location + getPathFromString(type, [id.toString()])); + } + } else { + createSnackBar(CHECK_CONNECTION, context); + } + }); + } + + IconData _getIcon() { + return Icons.check_circle_outline_sharp; + // return Icons.article_outlined; + // return Icons.arrow_forward_ios_sharp; + } +} + +class HeaderWidget extends StatelessWidget { + const HeaderWidget(this.title, this.description, this.imageUrl, {Key? key}) + : super(key: key); + + final title; + final description; + final imageUrl; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + AspectRatio( + aspectRatio: 1.3, + child: Stack( + children: [ + buildHeroImage(imageUrl), + _buildMeditoRoundCloseButton(), + _buildTitleText(context), + ], + ), + ), + if (description != null && description != '') _buildDescription(context) + ], + ); + } + + Widget _buildDescription(BuildContext context) { + return Container( + color: Colors.grey.shade900, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + description ?? '', + style: Theme.of(context) + .textTheme + .bodyMedium + ?.copyWith(color: Colors.white), + ), + ), + ); + } + + Widget _buildMeditoRoundCloseButton() { + return SafeArea( + child: Padding( + padding: const EdgeInsets.only(top: 20.0), + child: MeditoRoundCloseButton(), + ), + ); + } + + Widget _buildTitleText(BuildContext context) { + return Align( + alignment: Alignment.bottomLeft, + child: Padding( + padding: const EdgeInsets.only( + left: 20.0, + right: 20.0, + bottom: 12.0, + ), + child: Text( + title, + style: Theme.of(context).primaryTextTheme.headline4, + ), + ), + ); + } + + Image buildHeroImage(String imageUrl) { + return Image.asset( + 'assets/images/dalle.png', + fit: BoxFit.fill, + ); + } +} + +class MeditoRoundCloseButton extends StatelessWidget { + const MeditoRoundCloseButton({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialButton( + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + onPressed: () { + router.pop(); + }, + color: Colors.black38, + padding: EdgeInsets.all(16), + shape: CircleBorder(), + child: Icon( + Icons.close, + color: Colors.white, + ), + ); + } +} diff --git a/lib/network/home/courses_repo.dart b/lib/network/home/courses_repo.dart index c98cddd7..d404ca67 100644 --- a/lib/network/home/courses_repo.dart +++ b/lib/network/home/courses_repo.dart @@ -20,8 +20,9 @@ import 'package:Medito/network/http_get.dart'; class CoursesRepo { final _ext = 'items/courses'; - Future fetchCourses([bool skipCache = false]) async { + Future fetchCourses([bool skipCache = false]) async { final response = await httpGet(BASE_URL + _ext, skipCache: skipCache); + if(response == null) return null; return CoursesResponse.fromJson(response); } } diff --git a/lib/network/home/daily_message_repo.dart b/lib/network/home/daily_message_repo.dart index a71a603d..c7167903 100644 --- a/lib/network/home/daily_message_repo.dart +++ b/lib/network/home/daily_message_repo.dart @@ -20,8 +20,9 @@ import 'package:Medito/network/http_get.dart'; class DailyMessageRepo { final _ext = 'items/daily_message'; - Future? getMessage([bool skipCache = false]) async { + Future? getMessage([bool skipCache = false]) async { final response = await httpGet(BASE_URL + _ext, skipCache: skipCache); + if(response == null) return null; return DailyMessageResponse.fromJson(response); } } diff --git a/lib/network/home/home_repo.dart b/lib/network/home/home_repo.dart index f9a0e56d..615e01c2 100644 --- a/lib/network/home/home_repo.dart +++ b/lib/network/home/home_repo.dart @@ -13,15 +13,16 @@ Affero GNU General Public License for more details. You should have received a copy of the Affero GNU General Public License along with Medito App. If not, see .*/ -import 'package:Medito/network/home/menu_response.dart'; import 'package:Medito/network/auth.dart'; +import 'package:Medito/network/home/menu_response.dart'; import 'package:Medito/network/http_get.dart'; class HomeRepo { final _ext = 'items/menu'; - Future fetchMenu(bool skipCache) async { + Future fetchMenu(bool skipCache) async { final response = await httpGet(BASE_URL + _ext, skipCache: skipCache); + if (response == null) return null; return MenuResponse.fromJson(response); } } diff --git a/lib/network/home/shortcuts_repo.dart b/lib/network/home/shortcuts_repo.dart index 0da92be3..58892672 100644 --- a/lib/network/home/shortcuts_repo.dart +++ b/lib/network/home/shortcuts_repo.dart @@ -13,15 +13,16 @@ Affero GNU General Public License for more details. You should have received a copy of the Affero GNU General Public License along with Medito App. If not, see .*/ -import 'package:Medito/network/home/shortcuts_response.dart'; import 'package:Medito/network/auth.dart'; +import 'package:Medito/network/home/shortcuts_response.dart'; import 'package:Medito/network/http_get.dart'; class ShortcutsRepo { final _ext = 'items/shortcuts'; - Future fetchShortcuts({bool skipCache = false}) async { + Future fetchShortcuts({bool skipCache = false}) async { final response = await httpGet(BASE_URL + _ext, skipCache: skipCache); + if (response == null) return null; return ShortcutsResponse.fromJson(response); } } diff --git a/lib/network/http_get.dart b/lib/network/http_get.dart index 4154f189..ba722f74 100644 --- a/lib/network/http_get.dart +++ b/lib/network/http_get.dart @@ -24,7 +24,7 @@ import 'package:pedantic/pedantic.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; //move this to network package later -Future httpGet(String url, +Future?> httpGet(String url, {bool skipCache = false, String? fileNameForCache}) async { var cache; diff --git a/lib/network/packs/announcement_bloc.dart b/lib/network/packs/announcement_bloc.dart index 3c662be2..f0bff7e1 100644 --- a/lib/network/packs/announcement_bloc.dart +++ b/lib/network/packs/announcement_bloc.dart @@ -34,6 +34,7 @@ class AnnouncementBloc { try { var data = await _repo.fetchAnnouncements( skipCache: skipCache, hasOpened: hasOpened); + if (data == null) return; announcementController.add(data); } catch (e) { print(e); diff --git a/lib/network/packs/announcement_repo.dart b/lib/network/packs/announcement_repo.dart index b38facf7..68aebc3e 100644 --- a/lib/network/packs/announcement_repo.dart +++ b/lib/network/packs/announcement_repo.dart @@ -21,10 +21,11 @@ class AnnouncementRepository { var ext = 'items/announcement'; var welcome_ext = 'items/welcome_announcement'; - Future fetchAnnouncements( + Future fetchAnnouncements( {bool skipCache = false, bool hasOpened = false}) async { final response = await httpGet(BASE_URL + getExt(hasOpened), skipCache: skipCache); + if (response == null) return null; return AnnouncementResponse.fromJson(response); } diff --git a/lib/network/packs/packs_repo.dart b/lib/network/packs/packs_repo.dart index 8d1072bf..53e52f7c 100644 --- a/lib/network/packs/packs_repo.dart +++ b/lib/network/packs/packs_repo.dart @@ -13,14 +13,17 @@ Affero GNU General Public License for more details. You should have received a copy of the Affero GNU General Public License along with Medito App. If not, see .*/ -import 'package:Medito/network/packs/packs_response.dart'; import 'package:Medito/network/auth.dart'; import 'package:Medito/network/http_get.dart'; +import 'package:Medito/network/packs/packs_response.dart'; class PacksRepository { Future?> fetchPacks(bool skipCache) async { - final response = await httpGet(BASE_URL + 'items/packs', skipCache: skipCache); + final response = + await httpGet(BASE_URL + 'items/packs', skipCache: skipCache); + if (response == null) return null; + return PacksResponse.fromJson(response).data; } } diff --git a/lib/network/player/player_bloc.dart b/lib/network/player/player_bloc.dart index 42130767..0da450d8 100644 --- a/lib/network/player/player_bloc.dart +++ b/lib/network/player/player_bloc.dart @@ -26,6 +26,7 @@ import 'package:audio_service/audio_service.dart'; class PlayerBloc { PlayerRepository? _repo; PlayerCopyData? version; + @Deprecated('Use backgroundSoundsProvider instead') StreamController>? bgSoundsListController; @@ -44,6 +45,7 @@ class PlayerBloc { setVersionCopySeen(version?.id ?? 0); } + @Deprecated('Use backgroundSoundsProvider instead') Future fetchBackgroundSounds() async { try { var sounds = await _repo?.fetchBackgroundSounds(true); @@ -70,3 +72,4 @@ class PlayerBloc { bgSoundsListController?.close(); } } + diff --git a/lib/network/player/player_repo.dart b/lib/network/player/player_repo.dart index 596a4768..4abd0779 100644 --- a/lib/network/player/player_repo.dart +++ b/lib/network/player/player_repo.dart @@ -19,22 +19,41 @@ import 'package:Medito/network/http_get.dart'; import 'package:Medito/network/player/audio_complete_copy_response.dart'; import 'package:Medito/network/session_options/background_sounds.dart'; import 'package:audio_service/audio_service.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pedantic/pedantic.dart'; import '../user/user_utils.dart'; +var ext = 'items/player_copy?fields=*.*'; +var bgSoundsUrl = '${BASE_URL}items/background_sounds'; + +final backgroundSoundsProvider = + FutureProvider((ref) async { + final skipCache = ref.watch(bgSoundsSkipCacheProvider); + final content = await httpGet(bgSoundsUrl, skipCache: skipCache); + + if (content == null) return null; + + return BackgroundSoundsResponse.fromJson(content); +}); +final bgSoundsSkipCacheProvider = StateProvider((ref) => false); + class PlayerRepository { final _ext = 'items/player_copy?fields=*.*'; final _ratingExt = 'items/rating'; - var bgSoundsUrl = '${BASE_URL}items/background_sounds'; - Future fetchCopyData() async { + @Deprecated('Do not use') + Future fetchCopyData() async { final response = await httpGet(BASE_URL + _ext); + if (response == null) return null; return PlayerCopyResponse.fromJson(response); } - Future fetchBackgroundSounds(bool skipCache) async { + @Deprecated('Use backgroundSoundsProvider instead') + Future fetchBackgroundSounds( + bool skipCache) async { final response = await httpGet(bgSoundsUrl, skipCache: skipCache); + if (response == null) return null; return BackgroundSoundsResponse.fromJson(response); } diff --git a/lib/network/session_options/session_options_bloc.dart b/lib/network/session_options/session_options_bloc.dart index 8adff59d..57e52e40 100644 --- a/lib/network/session_options/session_options_bloc.dart +++ b/lib/network/session_options/session_options_bloc.dart @@ -129,8 +129,8 @@ class SessionOptionsBloc { Tracking.postUsage( Tracking.AUDIO_STARTED, { - Tracking.SESSION_ID: mediaItem.extras?[SESSION_ID], - Tracking.SESSION_DURATION: mediaItem.extras?[LENGTH], + Tracking.SESSION_ID: mediaItem.extras?[SESSION_ID].toString() ?? '', + Tracking.SESSION_DURATION: mediaItem.extras?[LENGTH].toString() ?? '', Tracking.SESSION_GUIDE: mediaItem.artist ?? '' }, ), diff --git a/lib/network/session_options/session_options_repo.dart b/lib/network/session_options/session_options_repo.dart index 8329ebf3..3db0527e 100644 --- a/lib/network/session_options/session_options_repo.dart +++ b/lib/network/session_options/session_options_repo.dart @@ -39,6 +39,8 @@ class SessionOptionsRepository { final response = await httpGet(url, skipCache: skipCache); + if (response == null) return null; + return SessionOptionsResponse.fromJson(response).data; } diff --git a/lib/network/text/text_bloc.dart b/lib/network/text/text_bloc.dart index f086b02a..0d5ae450 100644 --- a/lib/network/text/text_bloc.dart +++ b/lib/network/text/text_bloc.dart @@ -27,10 +27,10 @@ class TextBloc { var data = await _repo.fetchData(id, skipCache); if (!titleController.isClosed) { - titleController.sink.add(data.title ?? ''); + titleController.sink.add(data?.title ?? ''); } if (!bodyController.isClosed) { - bodyController.sink.add(data.body ?? ''); + bodyController.sink.add(data?.body ?? ''); } } } diff --git a/lib/network/text/text_repo.dart b/lib/network/text/text_repo.dart index 7020451e..463a6006 100644 --- a/lib/network/text/text_repo.dart +++ b/lib/network/text/text_repo.dart @@ -20,8 +20,9 @@ import 'package:Medito/network/http_get.dart'; class TextRepository { var ext = 'items/articles/'; - Future fetchData(String id, bool skipCache) async { + Future fetchData(String id, bool skipCache) async { final response = await httpGet(BASE_URL + ext + id, skipCache: skipCache); + if(response == null) return null; return TextResponse.fromJson(response); } } diff --git a/lib/utils/bgvolume_utils.dart b/lib/utils/bgvolume_utils.dart index 963dd343..4f18fba1 100644 --- a/lib/utils/bgvolume_utils.dart +++ b/lib/utils/bgvolume_utils.dart @@ -13,11 +13,25 @@ Affero GNU General Public License for more details. You should have received a copy of the Affero GNU General Public License along with Medito App. If not, see .*/ +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; const DEFAULT_VOLUME = 0.65; +@Deprecated('Use volume provider instead') Future retrieveSavedBgVolume() async { + return await _getSavedVolume(); +} + +final volumeProvider = StateProvider((_) => Volume()); + +class Volume { + Future getVolume() async { + return await _getSavedVolume(); + } +} + +Future _getSavedVolume() async { var prefs = await SharedPreferences.getInstance(); var vol; try { diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 2e6a6376..372fb73f 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -21,6 +21,9 @@ class MeditoColors { static var darkBGColor = Color(0xff22282D); static var almostBlack = Color(0xEE000000); + static var greyIsTheNewBlack = Color(0xFF1C1C1E); + static var greyIsTheNewGrey = Color(0xFF2C2C2E); + static const newGrey = Color(0xffb6b6b8); static const midnight = Color(0xff111213); diff --git a/lib/utils/navigation_extra.dart b/lib/utils/navigation_extra.dart index 83767cae..7bc6159b 100644 --- a/lib/utils/navigation_extra.dart +++ b/lib/utils/navigation_extra.dart @@ -1,3 +1,4 @@ +import 'package:Medito/network/folder/new_folder_screen.dart'; import 'package:Medito/utils/utils.dart'; import 'package:Medito/widgets/btm_nav/downloads_widget.dart'; import 'package:Medito/widgets/session_options/session_options_screen.dart'; @@ -5,9 +6,8 @@ import 'package:Medito/widgets/text/text_file_widget.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import '../widgets/folders/folder_nav_widget.dart'; import '../widgets/home/home_wrapper_widget.dart'; -import '../widgets/player/player2/player_widget_2.dart'; +import '../widgets/player/player2/new_player_widget.dart'; const String SessionPath = '/session/:sid'; const String DailyPath = '/daily/:did'; @@ -101,7 +101,9 @@ GoRoute _getSessionRoute() { GoRoute _getPlayerRoute() { return GoRoute( path: 'player', - pageBuilder: (context, state) => getPlayerMaterialPage(state), + pageBuilder: (context, state) { + return getPlayerMaterialPage(state); + }, ); } @@ -146,48 +148,50 @@ MaterialPage getCollectionMaterialPage(GoRouterState state) { } MaterialPage getPlayerMaterialPage(GoRouterState state) { - return MaterialPage(key: state.pageKey, child: PlayerWidget()); + return MaterialPage(key: state.pageKey, child: NewPlayerWidget()); } MaterialPage getFolderMaterialPage(GoRouterState state) { if (state.params.length == 1) { return MaterialPage( key: state.pageKey, - child: FolderNavWidget(id: state.params['fid'] ?? '')); + child: NewFolderScreen(id: state.params['fid'])); } else if (state.params.length == 2) { return MaterialPage( key: state.pageKey, - child: FolderNavWidget(id: state.params['f2id'] ?? '')); + child: NewFolderScreen(id: state.params['f2id'])); } else { return MaterialPage( key: state.pageKey, - child: FolderNavWidget(id: state.params['f3id'] ?? '')); + child: NewFolderScreen(id: state.params['f3id'])); } } -String getPathFromString(String? place, List ids) { +String getPathFromString(String? place, List ids) { + ids.removeWhere((element) => element == null); + if (place == 'session') { - return SessionPath.replaceAll(':sid', ids.first); + return SessionPath.replaceAll(':sid', ids.first!); } if (place == 'daily') { - return DailyPath.replaceAll(':did', ids.first); + return DailyPath.replaceAll(':did', ids.first!); } if (place == 'donation') { return DonationPath; } if (place == 'article') { - return ArticlePath.replaceAll(':aid', ids.first); + return ArticlePath.replaceAll(':aid', ids.first!); } if (place != null && place.contains('folder3')) { - return Folder3Path.replaceAll(':fid', ids.first).replaceAll(':f2id', ids[1]) - .replaceAll(':f3id', ids[2]); + return Folder3Path.replaceAll(':fid', ids.first!).replaceAll(':f2id', ids[1]!) + .replaceAll(':f3id', ids[2]!); } if (place != null && place.contains('folder2')) { - return Folder2Path.replaceAll(':fid', ids.first) - .replaceAll(':f2id', ids[1]); + return Folder2Path.replaceAll(':fid', ids.first!) + .replaceAll(':f2id', ids[1]!); } if (place == 'folder') { - return FolderPath.replaceAll(':fid', ids.first); + return FolderPath.replaceAll(':fid', ids.first!); } if (place == 'url') { launchUrl(ids.first); diff --git a/lib/widgets/home/home_wrapper_widget.dart b/lib/widgets/home/home_wrapper_widget.dart index 9b74b31b..5067fbeb 100644 --- a/lib/widgets/home/home_wrapper_widget.dart +++ b/lib/widgets/home/home_wrapper_widget.dart @@ -21,7 +21,6 @@ class _HomeWrapperWidgetState extends State { @override void initState() { - firstOpenOperations().then((hasOpened) { _hasOpened = hasOpened; setState(() { @@ -62,27 +61,27 @@ class _HomeWrapperWidgetState extends State { ?.copyWith(fontSize: 12), selectedItemColor: MeditoColors.walterWhite, unselectedItemColor: MeditoColors.newGrey, - currentIndex: _currentIndex, - onTap: _onTabTapped, - items: [ - BottomNavigationBarItem( - tooltip: 'Home', - icon: Icon( - Icons.home_outlined, - size: 20, + currentIndex: _currentIndex, + onTap: _onTabTapped, + items: [ + BottomNavigationBarItem( + tooltip: 'Home', + icon: Icon( + Icons.home_outlined, + size: 20, + ), + label: 'Home', + ), + BottomNavigationBarItem( + icon: Icon( + Icons.format_list_bulleted_outlined, + size: 20, + ), + tooltip: 'Packs', + label: 'Packs', + ), + ], ), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon( - Icons.format_list_bulleted_outlined, - size: 20, - ), - tooltip: 'Packs', - label: 'Packs', - ), - ], - ), ), ); } diff --git a/lib/widgets/player/background_sounds_sheet_widget.dart b/lib/widgets/player/background_sounds_sheet_widget.dart index a56425aa..25dc4cc1 100644 --- a/lib/widgets/player/background_sounds_sheet_widget.dart +++ b/lib/widgets/player/background_sounds_sheet_widget.dart @@ -81,8 +81,9 @@ class _ChooseBackgroundSoundDialogState _handler = AudioHandlerInheritedWidget.of(context).audioHandler; return StreamBuilder( - stream: Stream.fromFuture(Connectivity() - .checkConnectivity()), + stream: Stream.fromFuture( + Connectivity().checkConnectivity(), + ), builder: (context, snapshot) { if (snapshot.hasData) { if (snapshot.data == ConnectivityResult.none) { diff --git a/lib/widgets/player/player2/new_player_widget.dart b/lib/widgets/player/player2/new_player_widget.dart new file mode 100644 index 00000000..9653801a --- /dev/null +++ b/lib/widgets/player/player2/new_player_widget.dart @@ -0,0 +1,327 @@ +/*This file is part of Medito App. + +Medito App is free software: you can redistribute it and/or modify +it under the terms of the Affero GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Medito App is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +Affero GNU General Public License for more details. + +You should have received a copy of the Affero GNU General Public License +along with Medito App. If not, see .*/ + +import 'dart:async'; + +import 'package:Medito/audioplayer/media_lib.dart'; +import 'package:Medito/audioplayer/medito_audio_handler.dart'; +import 'package:Medito/network/player/player_bloc.dart'; +import 'package:Medito/utils/colors.dart'; +import 'package:Medito/utils/shared_preferences_utils.dart'; +import 'package:Medito/utils/strings.dart'; +import 'package:Medito/utils/utils.dart'; +import 'package:Medito/widgets/main/app_bar_widget.dart'; +import 'package:Medito/widgets/player/player2/audio_complete_dialog.dart'; +import 'package:Medito/widgets/player/position_indicator_widget.dart'; +import 'package:Medito/widgets/player/subtitle_text_widget.dart'; +import 'package:audio_service/audio_service.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:go_router/go_router.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; + +import '../../../audioplayer/audio_inherited_widget.dart'; +import '../../../tracking/tracking.dart'; +import '../../../utils/bgvolume_utils.dart'; + +class NewPlayerWidget extends StatefulWidget { + final normalPop; + + NewPlayerWidget({this.normalPop}); + + @override + _NewPlayerWidgetState createState() => _NewPlayerWidgetState(); +} + +class _NewPlayerWidgetState extends State { + MeditoAudioHandler? _handler; + late PlayerBloc _bloc; + + @override + void dispose() { + _handler?.stop(); + _bloc.dispose(); + super.dispose(); + } + + @override + void initState() { + super.initState(); + _startTimeout(); + _bloc = PlayerBloc(); + + Future.delayed(Duration(milliseconds: 200)).then((value) async { + var bgSound = await getBgSoundNameFromSharedPrefs(); + var volume = await retrieveSavedBgVolume(); + await _handler + ?.customAction(SET_BG_SOUND_VOL, {SET_BG_SOUND_VOL: volume}); + return _handler?.customAction(SEND_BG_SOUND, {SEND_BG_SOUND: bgSound}); + }); + } + + void _startTimeout() { + var timerMaxSeconds = 20; + Timer.periodic(Duration(seconds: timerMaxSeconds), (timer) { + if (_handler?.playbackState.value.processingState == + AudioProcessingState.loading && + mounted) { + createSnackBar(TIMEOUT, context); + } + timer.cancel(); + }); + } + + @override + Widget build(BuildContext context) { + _handler = AudioHandlerInheritedWidget.of(context).audioHandler; + var mediaItem = _handler?.mediaItem.value; + + try { + if (_hasBGSound() == true) { + getSavedBgSoundData(); + } + } on Exception catch (e, s) { + unawaited( + Sentry.captureException(e, + stackTrace: s, hint: 'extras[HAS_BG_SOUND]: ${_hasBGSound()}'), + ); + } + + _handler?.customEvent.stream.listen((event) { + if (mounted && + event[AUDIO_COMPLETE] is bool && + event[AUDIO_COMPLETE] == true) { + _trackSessionEnd(_handler?.mediaItem.value); + showGeneralDialog( + transitionDuration: Duration(milliseconds: 400), + context: context, + barrierColor: MeditoColors.darkMoon, + pageBuilder: (_, __, ___) { + return AudioCompleteDialog( + bloc: _bloc, mediaItem: _handler?.mediaItem.value); + }); + } + }); + + return Material( + color: MeditoColors.greyIsTheNewBlack, + child: SafeArea( + top: false, + child: Stack( + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + _getAppBar(), + _buildImage(mediaItem?.artUri?.toString()), + Container(height: 24), + _buildTitleRows(), + Expanded(child: SizedBox.shrink()), + _buildPlayerButtonRow(mediaItem), + Expanded(child: SizedBox.shrink()), + // A seek bar. + PositionIndicatorWidget( + handler: _handler, + bgSoundsStream: _bloc.bgSoundsListController?.stream), + Container(height: 24) + ]) + ], + ), + ), + ); + } + + bool? _hasBGSound() => _handler?.mediaItemHasBGSound(); + + StreamBuilder _buildPlayPauseButtons(MediaItem? mediaItem) { + return StreamBuilder( + stream: _handler?.playbackState.map((state) => state.playing).distinct(), + builder: (context, snapshot) { + final playing = snapshot.data ?? false; + if (playing) { + return _pauseButton(); + } else { + return _playButton(mediaItem); + } + }, + ); + } + + StreamBuilder _buildTitleRows() { + return StreamBuilder( + stream: _handler?.mediaItem.cast(), + builder: (context, snapshot) { + final mediaItem = snapshot.data; + return Column( + children: [_getTitleRow(mediaItem), _getSubtitleWidget(mediaItem)], + ); + }, + ); + } + + MeditoAppBarWidget _getAppBar() { + return MeditoAppBarWidget( + transparent: true, + hasCloseButton: true, + closePressed: _onBackPressed, + ); + } + + Widget _getTitleRow(MediaItem? mediaItem) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 4.0), + child: Row( + children: [ + Expanded( + child: Text( + mediaItem?.title ?? 'Loading...', + textAlign: TextAlign.center, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: buildTitleTheme(), + )), + ], + ), + ); + } + + TextStyle? buildTitleTheme() { + return Theme.of(context).textTheme.headline1; + } + + Widget _getSubtitleWidget(MediaItem? mediaItem) { + var attr = mediaItem?.extras != null ? (mediaItem?.extras?['attr']) : ''; + + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: SubtitleTextWidget(body: attr), + ); + } + + Widget _playButton(MediaItem? mediaItem) => Semantics( + label: 'Play button', + child: IconButton( + color: MeditoColors.walterWhite, + icon: Icon(Icons.play_circle_fill), + iconSize: 80, + onPressed: () => + _playPressed(mediaItem?.extras?[HAS_BG_SOUND] ?? true), + ), + ); + + Future _playPressed(bool hasBgSound) async { + await _handler?.play(); + if (hasBgSound) await getSavedBgSoundData(); + } + + Widget _pauseButton() => Semantics( + label: 'Pause button', + child: IconButton( + icon: Icon(Icons.pause_circle_filled), + iconSize: 80, + color: MeditoColors.walterWhite, + onPressed: _handler?.pause, + ), + ); + + Future getSavedBgSoundData() async { + var file = await getBgSoundFileFromSharedPrefs(); + var name = await getBgSoundNameFromSharedPrefs(); + unawaited(_handler?.customAction(SEND_BG_SOUND, {SEND_BG_SOUND: name})); + unawaited(_handler?.customAction(PLAY_BG_SOUND, {PLAY_BG_SOUND: file})); + } + + void _onBackPressed() { + GoRouter.of(context).pop(); + } + + Widget buildButtonLabel(MediaItem mediaItem) { + var label = _bloc.version?.buttonLabel; + + if (label == null) return Container(); + + return Text( + label, + style: Theme.of(context).textTheme.subtitle2?.copyWith( + color: parseColor(mediaItem.extras?[SECONDARY_COLOUR])), + ); + } + + Widget buildSvgPicture(Color secondaryColor) { + var icon = _bloc.version?.buttonIcon; + + if (icon == null) return Container(); + + return SvgPicture.asset( + 'assets/images/' + icon + '.svg', + color: secondaryColor, + ); + } + + void _trackSessionEnd(MediaItem? mediaItem) { + if (mediaItem == null) return; + unawaited( + Tracking.postUsage( + Tracking.AUDIO_COMPLETED, + { + Tracking.SESSION_ID: mediaItem.extras?[SESSION_ID].toString() ?? '', + Tracking.SESSION_DURATION: mediaItem.extras?[LENGTH].toString() ?? '', + Tracking.SESSION_GUIDE: mediaItem.artist ?? '' + }, + ), + ); + } + + Widget _buildPlayerButtonRow(MediaItem? mediaItem) { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + _buildRewindButton(), + Container(width: 38), + _buildPlayPauseButtons(mediaItem), + Container(width: 38), + _buildForwardButton() + ], + ); + } + + Widget _buildRewindButton() { + return IconButton( + iconSize: 40, + color: MeditoColors.walterWhite, + onPressed: () => _handler?.skipBackward10Secs(), + icon: Icon(Icons.replay_10)); + } + + Widget _buildForwardButton() { + return IconButton( + iconSize: 40, + color: MeditoColors.walterWhite, + onPressed: () => _handler?.skipForward30Secs(), + icon: Icon(Icons.forward_30)); + } + + Widget _buildImage(String? currentImage) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 40.0), + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(6))), + child: getNetworkImageWidget(currentImage ?? ''), + ), + ); + } +} diff --git a/lib/widgets/player/player2/player_widget_2.dart b/lib/widgets/player/player2/player_widget_2.dart deleted file mode 100644 index e7a4c6ff..00000000 --- a/lib/widgets/player/player2/player_widget_2.dart +++ /dev/null @@ -1,380 +0,0 @@ -/*This file is part of Medito App. - -Medito App is free software: you can redistribute it and/or modify -it under the terms of the Affero GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -Medito App is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -Affero GNU General Public License for more details. - -You should have received a copy of the Affero GNU General Public License -along with Medito App. If not, see .*/ - -import 'dart:async'; - -import 'package:Medito/audioplayer/media_lib.dart'; -import 'package:Medito/audioplayer/medito_audio_handler.dart'; -import 'package:Medito/network/player/player_bloc.dart'; -import 'package:Medito/utils/colors.dart'; -import 'package:Medito/utils/shared_preferences_utils.dart'; -import 'package:Medito/utils/strings.dart'; -import 'package:Medito/utils/utils.dart'; -import 'package:Medito/widgets/main/app_bar_widget.dart'; -import 'package:Medito/widgets/player/player2/audio_complete_dialog.dart'; -import 'package:Medito/widgets/player/player_button.dart'; -import 'package:Medito/widgets/player/position_indicator_widget.dart'; -import 'package:Medito/widgets/player/subtitle_text_widget.dart'; -import 'package:audio_service/audio_service.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; -import 'package:go_router/go_router.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; - -import '../../../audioplayer/audio_inherited_widget.dart'; -import '../../../tracking/tracking.dart'; -import '../../../utils/bgvolume_utils.dart'; -import '../background_sounds_sheet_widget.dart'; - -class PlayerWidget extends StatefulWidget { - final normalPop; - - PlayerWidget({this.normalPop}); - - @override - _PlayerWidgetState createState() => _PlayerWidgetState(); -} - -class _PlayerWidgetState extends State { - MeditoAudioHandler? _handler; - late PlayerBloc _bloc; - - @override - void dispose() { - _handler?.stop(); - _bloc.dispose(); - super.dispose(); - } - - @override - void initState() { - super.initState(); - _startTimeout(); - _bloc = PlayerBloc(); - - Future.delayed(Duration(milliseconds: 200)).then((value) async { - var bgSound = await getBgSoundNameFromSharedPrefs(); - var volume = await retrieveSavedBgVolume(); - await _handler - ?.customAction(SET_BG_SOUND_VOL, {SET_BG_SOUND_VOL: volume}); - return _handler?.customAction(SEND_BG_SOUND, {SEND_BG_SOUND: bgSound}); - }); - } - - void _startTimeout() { - var timerMaxSeconds = 20; - Timer.periodic(Duration(seconds: timerMaxSeconds), (timer) { - if (_handler?.playbackState.value.processingState == - AudioProcessingState.loading && - mounted) { - createSnackBar(TIMEOUT, context); - } - timer.cancel(); - }); - } - - @override - Widget build(BuildContext context) { - _handler = AudioHandlerInheritedWidget.of(context).audioHandler; - var mediaItem = _handler?.mediaItem.value; - - try { - if (_handler?.mediaItem.value?.extras?[HAS_BG_SOUND]) { - getSavedBgSoundData(); - } - } on Exception catch (e, s) { - unawaited(Sentry.captureException(e, - stackTrace: s, - hint: - 'extras[HAS_BG_SOUND]: ${_handler?.mediaItem.value?.extras?[HAS_BG_SOUND]}')); - } - - _handler?.customEvent.stream.listen((event) { - if (mounted && - event[AUDIO_COMPLETE] is bool && - event[AUDIO_COMPLETE] == true) { - _trackSessionEnd(_handler?.mediaItem.value); - showGeneralDialog( - transitionDuration: Duration(milliseconds: 400), - context: context, - barrierColor: MeditoColors.darkMoon, - pageBuilder: (_, __, ___) { - return AudioCompleteDialog( - bloc: _bloc, mediaItem: _handler?.mediaItem.value); - }); - } - }); - - return Material( - child: SafeArea( - top: false, - child: Stack( - children: [ - _getGradientWidget(mediaItem, context), - _getGradientOverlayWidget(), - Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - _getAppBar(), - // Show media item title - StreamBuilder( - stream: _handler?.mediaItem.cast(), - builder: (context, snapshot) { - final mediaItem = snapshot.data; - return Column( - children: [ - _getTitleRow(mediaItem, false), - _getSubtitleWidget(mediaItem, false) - ], - ); - }, - ), - Expanded(child: SizedBox.shrink()), - StreamBuilder( - stream: _handler?.playbackState - .map((state) => state.playing) - .distinct(), - builder: (context, snapshot) { - final playing = snapshot.data ?? false; - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.min, - children: [ - if (playing) - _pauseButton(mediaItem) - else - _playButton(mediaItem), - ], - ), - _getBgMusicIconButton( - mediaItem?.extras?[HAS_BG_SOUND] ?? true) - ], - ); - }, - ), - Expanded(child: SizedBox.shrink()), - // A seek bar. - PositionIndicatorWidget( - handler: _handler, - color: parseColor(mediaItem?.extras?[PRIMARY_COLOUR]), - ), - Container(height: 24) - ]) - ], - ), - ), - ); - } - - Widget _getGradientOverlayWidget() { - return Image.asset( - 'assets/images/texture.png', - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height, - fit: BoxFit.fill, - ); - } - - Widget _getGradientWidget(MediaItem? mediaItem, BuildContext context) { - return Align( - alignment: Alignment.center, - child: Container( - decoration: BoxDecoration( - gradient: RadialGradient( - colors: [ - parseColor(mediaItem?.extras?[PRIMARY_COLOUR]).withAlpha(100), - parseColor(mediaItem?.extras?[PRIMARY_COLOUR]).withAlpha(0), - ], - radius: 1.0, - )), - height: MediaQuery.of(context).size.height, - width: MediaQuery.of(context).size.width, - )); - } - - MeditoAppBarWidget _getAppBar() { - return MeditoAppBarWidget( - transparent: true, - hasCloseButton: true, - closePressed: _onBackPressed, - ); - } - - Widget _getTitleRow(MediaItem? mediaItem, bool complete) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 4.0), - child: Row( - children: [ - Expanded( - child: !complete - ? Text( - mediaItem?.title ?? 'Loading...', - textAlign: TextAlign.center, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: buildTitleTheme(), - ) - : FutureBuilder( - future: _bloc.getVersionTitle(), - builder: (context, snapshot) { - return Text( - snapshot.hasData ? (snapshot.data ?? '') : 'Loading...', - textAlign: TextAlign.center, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: buildTitleTheme(), - ); - })), - ], - ), - ); - } - - TextStyle? buildTitleTheme() { - return Theme.of(context).textTheme.headline1; - } - - Widget _getSubtitleWidget(MediaItem? mediaItem, bool complete) { - var attr = ''; - if (complete) { - attr = _bloc.version?.body ?? WELL_DONE_SUBTITLE; - } else { - attr = mediaItem?.extras != null ? (mediaItem?.extras?['attr']) : ''; - } - - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: SubtitleTextWidget(body: attr), - ); - } - - Widget _getBgMusicIconButton(bool visible) { - return Visibility( - visible: visible, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: EdgeInsets.only(top: 32), - child: MaterialButton( - enableFeedback: true, - textColor: MeditoColors.walterWhite, - color: MeditoColors.walterWhiteTrans, - onPressed: _onBgMusicPressed, - child: Padding( - padding: EdgeInsets.only(top: 4), - child: Row(children: [ - Icon( - Icons.music_note_outlined, - color: MeditoColors.walterWhite, - ), - Container(width: 8), - Text(SOUNDS), - Container(width: 8), - ]))), - ), - ], - ), - ); - } - - Widget _playButton(MediaItem? mediaItem) => Semantics( - label: 'Play button', - child: PlayerButton( - icon: Icons.play_arrow, - onPressed: () => _playPressed(mediaItem?.extras?[HAS_BG_SOUND] ?? true), - secondaryColor: parseColor(mediaItem?.extras?[SECONDARY_COLOUR]), - primaryColor: parseColor(mediaItem?.extras?[PRIMARY_COLOUR]), - ), - ); - - Future _playPressed(bool hasBgSound) async { - await _handler?.play(); - if (hasBgSound) await getSavedBgSoundData(); - } - - Widget _pauseButton(MediaItem? mediaItem) => Semantics( - label: 'Pause button', - child: PlayerButton( - icon: Icons.pause, - secondaryColor: parseColor(mediaItem?.extras?[SECONDARY_COLOUR]), - primaryColor: parseColor(mediaItem?.extras?[PRIMARY_COLOUR]), - onPressed: _handler?.pause, - ), - ); - - Future getSavedBgSoundData() async { - var file = await getBgSoundFileFromSharedPrefs(); - var name = await getBgSoundNameFromSharedPrefs(); - unawaited(_handler?.customAction(SEND_BG_SOUND, {SEND_BG_SOUND: name})); - unawaited(_handler?.customAction(PLAY_BG_SOUND, {PLAY_BG_SOUND: file})); - } - - void _onBackPressed() { - GoRouter.of(context).pop(); - } - - Widget buildButtonLabel(MediaItem mediaItem) { - var label = _bloc.version?.buttonLabel; - - if (label == null) return Container(); - - return Text( - label, - style: Theme.of(context).textTheme.subtitle2?.copyWith( - color: parseColor(mediaItem.extras?[SECONDARY_COLOUR])), - ); - } - - Widget buildSvgPicture(Color secondaryColor) { - var icon = _bloc.version?.buttonIcon; - - if (icon == null) return Container(); - - return SvgPicture.asset( - 'assets/images/' + icon + '.svg', - color: secondaryColor, - ); - } - - void _trackSessionEnd(MediaItem? mediaItem) { - if (mediaItem == null) return; - unawaited( - Tracking.postUsage( - Tracking.AUDIO_COMPLETED, - { - Tracking.SESSION_ID: mediaItem.extras?[SESSION_ID], - Tracking.SESSION_DURATION: mediaItem.extras?[LENGTH], - Tracking.SESSION_GUIDE: mediaItem.artist ?? '' - }, - ), - ); - } - - void _onBgMusicPressed() { - showModalBottomSheet( - context: context, - isScrollControlled: true, - builder: (context) => ChooseBackgroundSoundDialog( - handler: _handler, stream: _bloc.bgSoundsListController?.stream), - ); - // slight delay in case the cache returns before the sheet opens - Future.delayed(Duration(milliseconds: 50)) - .then((value) => _bloc.fetchBackgroundSounds()); - } -} diff --git a/lib/widgets/player/player_button.dart b/lib/widgets/player/player_button.dart deleted file mode 100644 index e96cdb24..00000000 --- a/lib/widgets/player/player_button.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:Medito/utils/colors.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; - -class PlayerButton extends StatelessWidget { - final Widget? child; - final IconData? icon; - final Future Function()? onPressed; - final Color? primaryColor; - final Color? secondaryColor; - final String? text; - final SvgPicture? image; - - PlayerButton( - {Key? key, - this.child, - this.icon, - this.onPressed, - this.primaryColor, - this.text, - this.secondaryColor, - this.image}) - : super(key: key); - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: onPressed, - child: Stack( - alignment: Alignment.center, - children: [ - SvgPicture.asset( - 'assets/images/blurb.svg', - height: 88, - width: 88, - color: primaryColor, - ), - image ?? - Icon( - icon, - size: 24, - color: secondaryColor ?? MeditoColors.darkMoon, - ), - child ?? Container() - ], - ), - ); - } -} diff --git a/lib/widgets/player/position_indicator_widget.dart b/lib/widgets/player/position_indicator_widget.dart index fe377809..759ec7b6 100644 --- a/lib/widgets/player/position_indicator_widget.dart +++ b/lib/widgets/player/position_indicator_widget.dart @@ -2,16 +2,19 @@ import 'dart:math'; import 'package:Medito/audioplayer/media_lib.dart'; import 'package:Medito/audioplayer/medito_audio_handler.dart'; +import 'package:Medito/network/player/player_bloc.dart'; import 'package:Medito/utils/colors.dart'; import 'package:Medito/utils/duration_ext.dart'; import 'package:flutter/material.dart'; import 'package:rxdart/rxdart.dart'; -class PositionIndicatorWidget extends StatefulWidget { - final Color? color; - final MeditoAudioHandler? handler; +import 'background_sounds_sheet_widget.dart'; - PositionIndicatorWidget({Key? key, this.handler, this.color}) +class PositionIndicatorWidget extends StatefulWidget { + final MeditoAudioHandler? handler; + final Stream? bgSoundsStream; + + PositionIndicatorWidget({Key? key, this.handler, this.bgSoundsStream}) : super(key: key); @override @@ -20,6 +23,8 @@ class PositionIndicatorWidget extends StatefulWidget { } class _PositionIndicatorWidgetState extends State { + final _speedList = ['X1', 'X1.25', 'X1.5', 'X2', 'X0.6']; + var _currentSpeed = 'X1'; /// Tracks the position while the user drags the seek bar. final BehaviorSubject _dragPositionSubject = @@ -27,13 +32,13 @@ class _PositionIndicatorWidgetState extends State { @override Widget build(BuildContext context) { - double? _seekPos; return StreamBuilder( stream: Rx.combineLatest2( _dragPositionSubject.stream, - Stream.periodic(Duration(milliseconds: 200), (count) => count.toDouble()), + Stream.periodic( + Duration(milliseconds: 200), (count) => count.toDouble()), (dragPosition, _) => dragPosition), builder: (context, AsyncSnapshot snapshot) { //snapshot.data will be non null if slider was dragged @@ -51,14 +56,14 @@ class _PositionIndicatorWidgetState extends State { padding: const EdgeInsets.only(left: 16.0, right: 16.0), child: SliderTheme( data: SliderThemeData( - trackHeight: 4, + trackHeight: 8, trackShape: CustomTrackShape(), - thumbShape: RoundSliderThumbShape(enabledThumbRadius: 12.0), + thumbShape: RoundSliderThumbShape(enabledThumbRadius: 0.0), ), child: Slider( min: 0.0, - activeColor: widget.color, - inactiveColor: MeditoColors.meditoTextGrey, + activeColor: MeditoColors.walterWhite, + inactiveColor: MeditoColors.greyIsTheNewGrey, max: duration.toDouble(), value: _seekPos ?? max(0.0, min(position.toDouble(), duration.toDouble())), @@ -66,7 +71,8 @@ class _PositionIndicatorWidgetState extends State { _dragPositionSubject.add(value); }, onChangeEnd: (value) { - widget.handler?.seek(Duration(milliseconds: value.toInt())); + widget.handler + ?.seek(Duration(milliseconds: value.toInt())); _seekPos = value; _dragPositionSubject.add(null); // todo is this ok? }, @@ -84,26 +90,157 @@ class _PositionIndicatorWidgetState extends State { return Padding( padding: const EdgeInsets.only(left: 16.0, right: 16.0), child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text( - Duration(milliseconds: position).toMinutesSeconds(), - style: Theme.of(context) - .textTheme - .subtitle2 - ?.copyWith(color: MeditoColors.meditoTextGrey), - ), - Text( - Duration(milliseconds: duration).toMinutesSeconds(), - style: Theme.of(context) - .textTheme - .subtitle2 - ?.copyWith(color: MeditoColors.meditoTextGrey), - ), + _getCurrentPositionLabel(position, context), + Container(width: 8), + _getSpeedLabel(duration, context), + Container(width: 8), + if (_hasBGSound()) _getSoundLabel(), + if (_hasBGSound()) Container(width: 8), + _getFullDurationLabel(duration, context), ], ), ); } + + bool _hasBGSound() => widget.handler?.mediaItemHasBGSound() == true; + + Expanded _getFullDurationLabel(int duration, BuildContext context) { + return Expanded( + flex: 25, + child: Container( + height: 40, + alignment: Alignment.center, + decoration: BoxDecoration( + color: MeditoColors.greyIsTheNewGrey, + borderRadius: BorderRadius.all(Radius.circular(3)), + ), + child: Text( + Duration(milliseconds: duration).toMinutesSeconds(), + style: Theme.of(context) + .textTheme + .subtitle2 + ?.copyWith(color: MeditoColors.walterWhite), + ), + ), + ); + } + + Expanded _getCurrentPositionLabel(int position, BuildContext context) { + return Expanded( + flex: 25, + child: Container( + alignment: Alignment.center, + height: 40, + decoration: BoxDecoration( + color: MeditoColors.greyIsTheNewGrey, + borderRadius: BorderRadius.all(Radius.circular(3)), + ), + child: Text( + Duration(milliseconds: position).toMinutesSeconds(), + style: Theme.of(context) + .textTheme + .subtitle2 + ?.copyWith(color: MeditoColors.walterWhite), + ), + ), + ); + } + + Widget _getSpeedLabel(int duration, BuildContext context) { + return Expanded( + flex: 25, + child: GestureDetector( + onTap: () => {widget.handler?.setPlayerSpeed(_getNextSpeed())}, + child: Container( + height: 40, + decoration: BoxDecoration( + color: MeditoColors.walterWhite, + borderRadius: BorderRadius.all(Radius.circular(3)), + ), + alignment: Alignment.center, + child: Text( + _currentSpeed, + style: Theme.of(context) + .textTheme + .subtitle2 + ?.copyWith(color: MeditoColors.greyIsTheNewGrey), + ), + ), + ), + ); + } + + Widget _getSoundLabel() { + return Builder(builder: (context) { + return GestureDetector( + onTap: () => _onBgMusicPressed(context), + child: Container( + height: 40, + padding: EdgeInsets.symmetric(horizontal: 24), + alignment: Alignment.center, + decoration: BoxDecoration( + color: MeditoColors.walterWhite, + borderRadius: BorderRadius.all(Radius.circular(3)), + ), + child: Text( + 'SOUND', + style: Theme.of(context) + .textTheme + .subtitle2 + ?.copyWith(color: MeditoColors.greyIsTheNewGrey), + ), + ), + ); + }); + } + + double _getNextSpeed() { + var nextIndex = _speedList.indexOf(_currentSpeed) + 1; + if (nextIndex >= _speedList.length) { + _currentSpeed = _speedList[0]; + } else { + _currentSpeed = _speedList[nextIndex]; + } + + setState(() { + _currentSpeed; + }); + return _getSpeedDoubleFromString(_currentSpeed); + } + + double _getSpeedDoubleFromString(String current) { + if (current == 'X1') { + return 1; + } else if (current == 'X1.25') { + return 1.25; + } else if (current == 'X1.5') { + return 1.5; + } else if (current == 'X2') { + return 2; + } else if (current == 'X0.6') { + return 0.6; + } else if (current == 'X0.75') { + return 1; + } else { + return 0.75; + } + } + + void _onBgMusicPressed(BuildContext context) { + var bloc = PlayerBloc(); + + // slight delay in case the cache returns before the sheet opens + Future.delayed(Duration(milliseconds: 50)) + .then((value) => bloc.fetchBackgroundSounds()); + showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (context) => ChooseBackgroundSoundDialog( + handler: widget.handler, stream: bloc.bgSoundsListController?.stream), + ); + } } class CustomTrackShape extends RoundedRectSliderTrackShape { @@ -123,7 +260,7 @@ class CustomTrackShape extends RoundedRectSliderTrackShape { final trackLeft = offset.dx; var trackTop; if (addTopPadding) { - trackTop = offset.dy + (parentBox.size.height - trackHeight) / 2 + 8; + trackTop = offset.dy + (parentBox.size.height - trackHeight) / 2 + 12; } else { trackTop = parentBox.size.height / 2 - 2; } diff --git a/pubspec.yaml b/pubspec.yaml index 5f8f3380..1622b6ce 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: flutter: sdk: flutter http: ^0.13.3 - google_fonts: ^2.3.1 + google_fonts: ^3.0.1 flutter_svg: ^1.0.3 path_provider: ^2.0.1 url_launcher: ^6.0.3 @@ -40,10 +40,17 @@ dependencies: sentry_flutter: ^6.9.1 back_button_interceptor: ^5.0.0 go_router: ^3.0.4 + flutter_riverpod: ^2.1.1 + freezed: ^2.2.0 + freezed_annotation: ^2.2.0 + json_annotation: ^4.7.0 dev_dependencies: + build_runner: ^2.3.0 + riverpod_generator: ^1.0.4 flutter_test: sdk: flutter + json_serializable: ^6.5.4 mocktail: ^0.3.0