feat: Bump dependencies + make AniList link work

This commit is contained in:
2026-07-25 16:48:30 +02:00
parent 6c2af9fc57
commit 9ef699be3c
8 changed files with 174 additions and 107 deletions

View File

@@ -1,3 +1,4 @@
import 'package:anitrack/src/data/data_base.dart';
import 'package:anitrack/src/data/source.dart';
import 'package:anitrack/src/data/type.dart';
import 'package:anitrack/src/service/database.dart';
@@ -18,7 +19,9 @@ class BoolConverter implements JsonConverter<bool, int> {
/// Data about a tracked anime
@freezed
abstract class AnimeTrackingData with _$AnimeTrackingData, TrackingMedium {
abstract class AnimeTrackingData
with _$AnimeTrackingData, TrackingMedium
implements TrackingDataBase {
factory AnimeTrackingData(
/// The ID of the anime
String id,

View File

@@ -0,0 +1,5 @@
import 'package:anitrack/src/data/source.dart';
abstract class TrackingDataBase {
TrackingDataSource get source;
}

View File

@@ -1,3 +1,4 @@
import 'package:anitrack/src/data/data_base.dart';
import 'package:anitrack/src/data/source.dart';
import 'package:anitrack/src/data/type.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
@@ -7,7 +8,9 @@ part 'manga.g.dart';
/// Data about a tracked anime
@freezed
abstract class MangaTrackingData with _$MangaTrackingData, TrackingMedium {
abstract class MangaTrackingData
with _$MangaTrackingData, TrackingMedium
implements TrackingDataBase {
factory MangaTrackingData(
/// The ID of the manga
String id,

View File

@@ -1,7 +1,9 @@
import 'package:anitrack/i18n/strings.g.dart';
import 'package:anitrack/src/data/anime.dart';
import 'package:anitrack/src/data/anime_watcher.dart';
import 'package:anitrack/src/data/data_base.dart';
import 'package:anitrack/src/data/manga.dart';
import 'package:anitrack/src/data/source.dart';
import 'package:anitrack/src/data/type.dart';
import 'package:anitrack/src/ui/bloc/details_bloc.dart';
import 'package:anitrack/src/ui/constants.dart';
@@ -28,6 +30,31 @@ class DetailsPage extends StatelessWidget {
),
);
String _mangaUrl(MangaTrackingData data) {
switch (data.source) {
case TrackingDataSource.mal:
return 'https://myanimelist.net/manga/${data.id}';
case TrackingDataSource.anilist:
return 'https://anilist.co/manga/${data.id}';
}
}
String _animeUrl(AnimeTrackingData data) {
switch (data.source) {
case TrackingDataSource.mal:
return 'https://myanimelist.net/anime/${data.id}';
case TrackingDataSource.anilist:
return 'https://anilist.co/anime/${data.id}';
}
}
String _sourceButtonName(TrackingDataBase data) {
return switch (data.source) {
TrackingDataSource.mal => t.details.mal,
TrackingDataSource.anilist => t.details.anilist,
};
}
@override
Widget build(BuildContext context) {
return Scaffold(
@@ -246,20 +273,30 @@ class DetailsPage extends StatelessWidget {
children: [
ElevatedButton(
onPressed: () async {
final url = switch (state
.trackingType) {
TrackingMediumType.anime =>
'https://myanimelist.net/anime/${state.data!.id}',
TrackingMediumType.manga =>
'https://myanimelist.net/manga/${state.data!.id}',
};
final url =
switch (state.trackingType) {
TrackingMediumType.anime =>
_animeUrl(
state.data!
as AnimeTrackingData,
),
TrackingMediumType.manga =>
_mangaUrl(
state.data!
as MangaTrackingData,
),
};
await launchUrl(
Uri.parse(url),
mode: LaunchMode
.externalApplication,
);
},
child: Text(t.details.mal),
child: Text(
_sourceButtonName(
state.data! as TrackingDataBase,
),
),
),
],
),