refactor
This commit is contained in:
parent
8c841baaa3
commit
c906eec398
12 changed files with 106 additions and 44 deletions
|
|
@ -186,7 +186,7 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
|
|||
bool _hasEndingSkip = false;
|
||||
bool _initSubtitleAndAudio = true;
|
||||
|
||||
late final StreamSubscription<Duration> _currentPositionSub =
|
||||
late StreamSubscription<Duration> _currentPositionSub =
|
||||
_player.stream.position.listen(
|
||||
(position) async {
|
||||
_isCompleted.value =
|
||||
|
|
@ -240,7 +240,29 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
|
|||
}
|
||||
}
|
||||
|
||||
bool isFFF = false;
|
||||
void _setCurrentAudSub() {
|
||||
_initSubtitleAndAudio = true;
|
||||
_currentPositionSub = _player.stream.position.listen(
|
||||
(position) async {
|
||||
_isCompleted.value = _player.state.duration.inSeconds -
|
||||
_currentPosition.value.inSeconds <=
|
||||
10;
|
||||
_currentPosition.value = position;
|
||||
if (_initSubtitleAndAudio) {
|
||||
final subtitle = _player.state.track.subtitle;
|
||||
try {
|
||||
_player.setSubtitleTrack(subtitle);
|
||||
} catch (_) {}
|
||||
try {
|
||||
final audio = _player.state.track.audio;
|
||||
_player.setAudioTrack(audio);
|
||||
} catch (_) {}
|
||||
}
|
||||
_initSubtitleAndAudio = false;
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_currentPositionSub;
|
||||
|
|
@ -400,6 +422,7 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
|
|||
httpHeaders: quality.headers,
|
||||
start: _currentPosition.value));
|
||||
}
|
||||
_setCurrentAudSub();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -239,21 +239,14 @@ Widget _extensionUpdateNumbers(WidgetRef ref, ItemType itemType) {
|
|||
compareVersions(element.version!, element.versionLast!) < 0)
|
||||
.toList();
|
||||
return entries.isEmpty
|
||||
? Container()
|
||||
: Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
color: Theme.of(context).focusColor),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(5),
|
||||
child: Text(
|
||||
entries.length.toString(),
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
color: Theme.of(context).textTheme.bodySmall!.color),
|
||||
),
|
||||
),
|
||||
);
|
||||
? SizedBox.shrink()
|
||||
: Badge(
|
||||
backgroundColor: Theme.of(context).focusColor,
|
||||
label: Text(
|
||||
entries.length.toString(),
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).textTheme.bodySmall!.color),
|
||||
));
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'migration.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$migrationHash() => r'7354a8368b73fdfcfd284848b9837b4bc9047e7f';
|
||||
String _$migrationHash() => r'd4ebb16320d44b90ca9532f10e8128b9ee8ab52d';
|
||||
|
||||
/// See also [migration].
|
||||
@ProviderFor(migration)
|
||||
|
|
|
|||
|
|
@ -227,9 +227,33 @@ class _UpdatesScreenState extends ConsumerState<UpdatesScreen>
|
|||
indicatorSize: TabBarIndicatorSize.tab,
|
||||
controller: _tabBarController,
|
||||
tabs: [
|
||||
if (!hideManga) Tab(text: l10n.manga),
|
||||
if (!hideAnime) Tab(text: l10n.anime),
|
||||
if (!hideNovel) Tab(text: l10n.novel),
|
||||
if (!hideManga)
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Tab(text: l10n.manga),
|
||||
const SizedBox(width: 8),
|
||||
_updateNumbers(ref, ItemType.manga)
|
||||
],
|
||||
),
|
||||
if (!hideAnime)
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Tab(text: l10n.anime),
|
||||
const SizedBox(width: 8),
|
||||
_updateNumbers(ref, ItemType.anime)
|
||||
],
|
||||
),
|
||||
if (!hideNovel)
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Tab(text: l10n.novel),
|
||||
const SizedBox(width: 8),
|
||||
_updateNumbers(ref, ItemType.novel)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
@ -373,3 +397,28 @@ class _UpdateTabState extends ConsumerState<UpdateTab> {
|
|||
));
|
||||
}
|
||||
}
|
||||
|
||||
Widget _updateNumbers(WidgetRef ref, ItemType itemType) {
|
||||
return StreamBuilder(
|
||||
stream: isar.updates
|
||||
.filter()
|
||||
.idIsNotNull()
|
||||
.and()
|
||||
.chapter((q) => q.manga((q) => q.itemTypeEqualTo(itemType)))
|
||||
.watch(fireImmediately: true),
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasData && snapshot.data!.isNotEmpty) {
|
||||
final entries = snapshot.data!.toList();
|
||||
return entries.isEmpty
|
||||
? SizedBox.shrink()
|
||||
: Badge(
|
||||
backgroundColor: Theme.of(context).focusColor,
|
||||
label: Text(
|
||||
entries.length.toString(),
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).textTheme.bodySmall!.color),
|
||||
));
|
||||
}
|
||||
return Container();
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'aniskip.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$aniSkipHash() => r'2e5d19b025a2207ff64da7bf7908450ea9e5ff8c';
|
||||
String _$aniSkipHash() => r'887869b54e2e151633efd46da83bde845e14f421';
|
||||
|
||||
/// See also [AniSkip].
|
||||
@ProviderFor(AniSkip)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
part 'fetch_anime_sources.g.dart';
|
||||
|
||||
@riverpod
|
||||
@Riverpod(keepAlive: true)
|
||||
Future fetchAnimeSourcesList(Ref ref, {int? id, required bool reFresh}) async {
|
||||
if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) {
|
||||
await fetchSourcesList(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ part of 'fetch_anime_sources.dart';
|
|||
// **************************************************************************
|
||||
|
||||
String _$fetchAnimeSourcesListHash() =>
|
||||
r'75185e008e90491987fabb55851c536de89653a4';
|
||||
r'34db8fac67fb2d445645e62adc68b6d13d481897';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
@ -76,7 +76,7 @@ class FetchAnimeSourcesListFamily extends Family<AsyncValue> {
|
|||
}
|
||||
|
||||
/// See also [fetchAnimeSourcesList].
|
||||
class FetchAnimeSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
|
||||
class FetchAnimeSourcesListProvider extends FutureProvider<Object?> {
|
||||
/// See also [fetchAnimeSourcesList].
|
||||
FetchAnimeSourcesListProvider({
|
||||
int? id,
|
||||
|
|
@ -134,7 +134,7 @@ class FetchAnimeSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
|
|||
}
|
||||
|
||||
@override
|
||||
AutoDisposeFutureProviderElement<Object?> createElement() {
|
||||
FutureProviderElement<Object?> createElement() {
|
||||
return _FetchAnimeSourcesListProviderElement(this);
|
||||
}
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ class FetchAnimeSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
|
|||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin FetchAnimeSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
|
||||
mixin FetchAnimeSourcesListRef on FutureProviderRef<Object?> {
|
||||
/// The parameter `id` of this provider.
|
||||
int? get id;
|
||||
|
||||
|
|
@ -166,8 +166,7 @@ mixin FetchAnimeSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
|
|||
}
|
||||
|
||||
class _FetchAnimeSourcesListProviderElement
|
||||
extends AutoDisposeFutureProviderElement<Object?>
|
||||
with FetchAnimeSourcesListRef {
|
||||
extends FutureProviderElement<Object?> with FetchAnimeSourcesListRef {
|
||||
_FetchAnimeSourcesListProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
part 'fetch_manga_sources.g.dart';
|
||||
|
||||
@riverpod
|
||||
@Riverpod(keepAlive: true)
|
||||
Future fetchMangaSourcesList(Ref ref, {int? id, required reFresh}) async {
|
||||
if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) {
|
||||
await fetchSourcesList(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ part of 'fetch_manga_sources.dart';
|
|||
// **************************************************************************
|
||||
|
||||
String _$fetchMangaSourcesListHash() =>
|
||||
r'f66f3011e72a3b234d7729ef203fc5f255870db3';
|
||||
r'b56d2a229f2d0a2ef4dc93d9f06cc8485dcd2285';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
@ -76,7 +76,7 @@ class FetchMangaSourcesListFamily extends Family<AsyncValue> {
|
|||
}
|
||||
|
||||
/// See also [fetchMangaSourcesList].
|
||||
class FetchMangaSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
|
||||
class FetchMangaSourcesListProvider extends FutureProvider<Object?> {
|
||||
/// See also [fetchMangaSourcesList].
|
||||
FetchMangaSourcesListProvider({
|
||||
int? id,
|
||||
|
|
@ -134,7 +134,7 @@ class FetchMangaSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
|
|||
}
|
||||
|
||||
@override
|
||||
AutoDisposeFutureProviderElement<Object?> createElement() {
|
||||
FutureProviderElement<Object?> createElement() {
|
||||
return _FetchMangaSourcesListProviderElement(this);
|
||||
}
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ class FetchMangaSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
|
|||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin FetchMangaSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
|
||||
mixin FetchMangaSourcesListRef on FutureProviderRef<Object?> {
|
||||
/// The parameter `id` of this provider.
|
||||
int? get id;
|
||||
|
||||
|
|
@ -166,8 +166,7 @@ mixin FetchMangaSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
|
|||
}
|
||||
|
||||
class _FetchMangaSourcesListProviderElement
|
||||
extends AutoDisposeFutureProviderElement<Object?>
|
||||
with FetchMangaSourcesListRef {
|
||||
extends FutureProviderElement<Object?> with FetchMangaSourcesListRef {
|
||||
_FetchMangaSourcesListProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
part 'fetch_novel_sources.g.dart';
|
||||
|
||||
@riverpod
|
||||
@Riverpod(keepAlive: true)
|
||||
Future fetchNovelSourcesList(Ref ref, {int? id, required reFresh}) async {
|
||||
if (ref.watch(checkForExtensionsUpdateStateProvider) || reFresh) {
|
||||
await fetchSourcesList(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ part of 'fetch_novel_sources.dart';
|
|||
// **************************************************************************
|
||||
|
||||
String _$fetchNovelSourcesListHash() =>
|
||||
r'1444d9ca12204ccf5389efe085c8a20e3498a808';
|
||||
r'9a7afa9c301d2f4be51c074e5a81117f6d01352a';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
@ -76,7 +76,7 @@ class FetchNovelSourcesListFamily extends Family<AsyncValue> {
|
|||
}
|
||||
|
||||
/// See also [fetchNovelSourcesList].
|
||||
class FetchNovelSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
|
||||
class FetchNovelSourcesListProvider extends FutureProvider<Object?> {
|
||||
/// See also [fetchNovelSourcesList].
|
||||
FetchNovelSourcesListProvider({
|
||||
int? id,
|
||||
|
|
@ -134,7 +134,7 @@ class FetchNovelSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
|
|||
}
|
||||
|
||||
@override
|
||||
AutoDisposeFutureProviderElement<Object?> createElement() {
|
||||
FutureProviderElement<Object?> createElement() {
|
||||
return _FetchNovelSourcesListProviderElement(this);
|
||||
}
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ class FetchNovelSourcesListProvider extends AutoDisposeFutureProvider<Object?> {
|
|||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin FetchNovelSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
|
||||
mixin FetchNovelSourcesListRef on FutureProviderRef<Object?> {
|
||||
/// The parameter `id` of this provider.
|
||||
int? get id;
|
||||
|
||||
|
|
@ -166,8 +166,7 @@ mixin FetchNovelSourcesListRef on AutoDisposeFutureProviderRef<Object?> {
|
|||
}
|
||||
|
||||
class _FetchNovelSourcesListProviderElement
|
||||
extends AutoDisposeFutureProviderElement<Object?>
|
||||
with FetchNovelSourcesListRef {
|
||||
extends FutureProviderElement<Object?> with FetchNovelSourcesListRef {
|
||||
_FetchNovelSourcesListProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'anilist.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$anilistHash() => r'ddd07acc8d28d2aa95c942566109e9393ca9e5ed';
|
||||
String _$anilistHash() => r'70e8cd537270a9054a1ef72de117fc7ad5545218';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
Loading…
Reference in a new issue