diff --git a/analysis_options.yaml b/analysis_options.yaml index dbf0d0f9..a3b21dff 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -10,6 +10,8 @@ analyzer: errors: body_might_complete_normally_catch_error: ignore + exclude: + - lib/native/** include: package:flutter_lints/flutter.yaml diff --git a/lib/services/anniv/anniv.dart b/lib/services/anniv/anniv.dart index 0098716a..636715b9 100644 --- a/lib/services/anniv/anniv.dart +++ b/lib/services/anniv/anniv.dart @@ -63,7 +63,7 @@ class AnnivService extends ChangeNotifier { info = SiteUserInfo(site: site, user: user); await _saveInfo(); } catch (e) { - if (e is DioError && e.error is AnnivError) { + if (e is DioException && e.error is AnnivError) { final error = e.error as AnnivError; if (error.status == 902002) { // unauthorized, logout diff --git a/lib/services/metadata/metadata_source_sqlite.dart b/lib/services/metadata/metadata_source_sqlite.dart index 1a863876..9b0be3ec 100644 --- a/lib/services/metadata/metadata_source_sqlite.dart +++ b/lib/services/metadata/metadata_source_sqlite.dart @@ -25,7 +25,7 @@ class SqliteMetadataSource extends MetadataSource { } Future _getAlbum(final String albumId) async { - final album = await database.getAlbum(albumId: UuidValue(albumId)); + final album = await database.getAlbum(albumId: UuidValue.raw(albumId)); if (album == null) { return null; } else { diff --git a/lib/ui/dialogs/annil.dart b/lib/ui/dialogs/annil.dart index d002f266..de3436bd 100644 --- a/lib/ui/dialogs/annil.dart +++ b/lib/ui/dialogs/annil.dart @@ -1,4 +1,4 @@ -import 'package:annix/ui/route/delegate.dart'; +import 'package:annix/providers.dart'; import 'package:annix/utils/context_extension.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; @@ -74,7 +74,7 @@ class AnnilDialog extends HookConsumerWidget { TextButton( style: TextButton.styleFrom(textStyle: context.textTheme.labelLarge), child: const Text('Cancel'), - onPressed: () => AnnixRouterDelegate.of(context).popRoute(), + onPressed: () => ref.read(routerProvider).popRoute(), ), TextButton( style: TextButton.styleFrom(textStyle: context.textTheme.labelLarge), @@ -82,7 +82,7 @@ class AnnilDialog extends HookConsumerWidget { ? const Text('Add') : const Text('Update'), onPressed: () { - AnnixRouterDelegate.of(context).popRoute(); + ref.read(routerProvider).popRoute(); onSubmit( serverNameController.text, serverUrlController.text, diff --git a/lib/ui/page/anniv_login.dart b/lib/ui/page/anniv_login.dart index 59e9272a..d5c3e5b1 100644 --- a/lib/ui/page/anniv_login.dart +++ b/lib/ui/page/anniv_login.dart @@ -1,6 +1,5 @@ import 'package:annix/providers.dart'; import 'package:annix/ui/dialogs/loading.dart'; -import 'package:annix/ui/route/delegate.dart'; import 'package:flutter/material.dart'; import 'package:annix/i18n/strings.g.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; @@ -32,7 +31,7 @@ class AnnivLoginPage extends HookConsumerWidget { var url = serverUrlController.text; var email = emailController.text; final password = passwordController.text; - final delegate = AnnixRouterDelegate.of(context); + final delegate = ref.read(routerProvider); if (url.isEmpty) { _showSnackBar(context, 'Please enter a valid URL'); } else if (email.isEmpty || !email.contains('@')) { diff --git a/lib/ui/page/home/home_action_grid.dart b/lib/ui/page/home/home_action_grid.dart index 87aa9c2c..045b5913 100644 --- a/lib/ui/page/home/home_action_grid.dart +++ b/lib/ui/page/home/home_action_grid.dart @@ -1,6 +1,5 @@ import 'package:annix/providers.dart'; import 'package:annix/ui/dialogs/loading.dart'; -import 'package:annix/ui/route/delegate.dart'; import 'package:annix/utils/context_extension.dart'; import 'package:flutter/material.dart'; import 'package:annix/i18n/strings.g.dart'; @@ -27,7 +26,7 @@ class HomeActionGrid extends ConsumerWidget { icon: const Icon(Icons.favorite_outline), title: t.my_favorite, onPressed: () { - AnnixRouterDelegate.of(context).to(name: '/favorite'); + ref.read(routerProvider).to(name: '/favorite'); }, ), HomeActionButton( @@ -46,14 +45,14 @@ class HomeActionGrid extends ConsumerWidget { icon: const Icon(Icons.history), title: t.recent_played, onPressed: () { - AnnixRouterDelegate.of(context).to(name: '/history'); + ref.read(routerProvider).to(name: '/history'); }, ), HomeActionButton( icon: const Icon(Icons.download), title: t.download, onPressed: () { - AnnixRouterDelegate.of(context).to(name: '/downloading'); + ref.read(routerProvider).to(name: '/downloading'); }, ), ], diff --git a/lib/ui/page/home/home_appbar.dart b/lib/ui/page/home/home_appbar.dart index 73a6a305..cfe65ec4 100644 --- a/lib/ui/page/home/home_appbar.dart +++ b/lib/ui/page/home/home_appbar.dart @@ -23,7 +23,7 @@ class HomeAppBar extends ConsumerWidget { child: TextButton( child: Text(t.server.login), onPressed: () { - AnnixRouterDelegate.of(context).to(name: '/login'); + ref.read(routerProvider).to(name: '/login'); }, ), ); @@ -36,7 +36,7 @@ class HomeAppBar extends ConsumerWidget { child: Text(info!.user.nickname.substring(0, 1)), ), onPressed: () { - AnnixRouterDelegate.of(context).to(name: '/server'); + ref.read(routerProvider).to(name: '/server'); }, ), ], diff --git a/lib/ui/page/home/home_playlist.dart b/lib/ui/page/home/home_playlist.dart index 641852ff..4e192196 100644 --- a/lib/ui/page/home/home_playlist.dart +++ b/lib/ui/page/home/home_playlist.dart @@ -1,6 +1,5 @@ import 'package:annix/providers.dart'; import 'package:annix/services/playback/playback.dart'; -import 'package:annix/ui/route/delegate.dart'; import 'package:annix/ui/widgets/cover.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; @@ -36,7 +35,7 @@ class PlaylistView extends ConsumerWidget { overflow: TextOverflow.ellipsis, ), onTap: () async { - final delegate = AnnixRouterDelegate.of(context); + final delegate = ref.read(routerProvider); final list = await Playlist.load( id: playlist.id, db: ref.read(localDatabaseProvider), diff --git a/lib/ui/page/playing/playing_desktop.dart b/lib/ui/page/playing/playing_desktop.dart index 472a2e9e..1950bfa3 100644 --- a/lib/ui/page/playing/playing_desktop.dart +++ b/lib/ui/page/playing/playing_desktop.dart @@ -1,6 +1,5 @@ import 'package:annix/providers.dart'; import 'package:annix/ui/dialogs/search_lyrics.dart'; -import 'package:annix/ui/route/delegate.dart'; import 'package:annix/ui/widgets/fade_indexed_stack.dart'; import 'package:annix/ui/widgets/lyric.dart'; import 'package:annix/ui/widgets/cover.dart'; @@ -94,8 +93,7 @@ class _PlayingDesktopScreenState extends State { ), onPressed: () { // FIXME: dialog to show all available tags - final router = - AnnixRouterDelegate.of(context); + final router = ref.read(routerProvider); router.to( name: '/tag', arguments: track.artist, @@ -113,8 +111,7 @@ class _PlayingDesktopScreenState extends State { overflow: TextOverflow.ellipsis, ), onPressed: () async { - final router = - AnnixRouterDelegate.of(context); + final router = ref.read(routerProvider); router.to( name: '/album', arguments: track.id.albumId, diff --git a/lib/ui/page/playing/playing_mobile_widgets.dart b/lib/ui/page/playing/playing_mobile_widgets.dart index 959e5185..20585e7b 100644 --- a/lib/ui/page/playing/playing_mobile_widgets.dart +++ b/lib/ui/page/playing/playing_mobile_widgets.dart @@ -2,7 +2,6 @@ import 'package:animations/animations.dart'; import 'package:annix/providers.dart'; import 'package:annix/services/annil/cache.dart'; import 'package:annix/ui/dialogs/search_lyrics.dart'; -import 'package:annix/ui/route/delegate.dart'; import 'package:annix/ui/widgets/artist_text.dart'; import 'package:annix/ui/widgets/buttons/loop_mode_button.dart'; import 'package:annix/ui/widgets/buttons/play_pause_button.dart'; @@ -80,7 +79,7 @@ class PlayingScreenMobileBottomBar extends ConsumerWidget { child: Text(t.playing.view_albums), onPressed: () { // hide playing page - AnnixRouterDelegate.of(context).slideController.hide(); + ref.read(routerProvider).slideController.hide(); // jump to album page delegate.to( name: '/album', diff --git a/lib/ui/widgets/album/album_grid.dart b/lib/ui/widgets/album/album_grid.dart index 98bb85ba..7c4ac142 100644 --- a/lib/ui/widgets/album/album_grid.dart +++ b/lib/ui/widgets/album/album_grid.dart @@ -1,6 +1,5 @@ import 'package:annix/providers.dart'; import 'package:annix/services/metadata/metadata_model.dart'; -import 'package:annix/ui/route/delegate.dart'; import 'package:annix/ui/widgets/artist_text.dart'; import 'package:annix/ui/widgets/cover.dart'; import 'package:annix/utils/context_extension.dart'; @@ -30,7 +29,7 @@ class AlbumGrid extends ConsumerWidget { void toAlbum(final BuildContext context) { metadataFuture.then((final album) { if (album != null) { - AnnixRouterDelegate.of(context).to(name: '/album', arguments: album); + ref.read(routerProvider).to(name: '/album', arguments: album); } }); } diff --git a/lib/utils/redirect_interceptor.dart b/lib/utils/redirect_interceptor.dart index be90ea44..9d46827e 100644 --- a/lib/utils/redirect_interceptor.dart +++ b/lib/utils/redirect_interceptor.dart @@ -31,10 +31,10 @@ class RedirectInterceptor extends Interceptor { @override Future onError( - final DioError err, + final DioException err, final ErrorInterceptorHandler handler, ) async { - if (err.type == DioErrorType.badResponse && err.response!.isRedirect) { + if (err.type == DioExceptionType.badResponse && err.response!.isRedirect) { final url = err.requestOptions.extra['annil-dl-url']; if (url != null) { headers.putIfAbsent(url, () => err.response!.headers); @@ -42,7 +42,7 @@ class RedirectInterceptor extends Interceptor { opt.followRedirects = true; try { await client.fetch(opt).then((final value) => handler.resolve(value)); - } on DioError catch (e) { + } on DioException catch (e) { super.onError(e, handler); } }