fix: Fix routing

This commit is contained in:
2026-07-26 15:53:36 +02:00
parent 34b3817e6d
commit d034875e16
17 changed files with 602 additions and 500 deletions

View File

@@ -6,6 +6,7 @@ import 'package:anitrack/src/ui/bloc/navigation_bloc.dart';
import 'package:anitrack/src/ui/constants.dart';
import 'package:bloc/bloc.dart';
import 'package:collection/collection.dart';
import 'package:flutter/cupertino.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:get_it/get_it.dart';
@@ -41,6 +42,9 @@ class AnimeListBloc extends Bloc<AnimeListEvent, AnimeListState> {
growable: true,
);
/// Controller for the bottom navigation bar
final pageController = PageController();
List<AnimeTrackingData> get unfilteredAnime => _animes;
List<AnimeTrackingData> _getFilteredAnime({
@@ -372,10 +376,7 @@ class AnimeListBloc extends Bloc<AnimeListEvent, AnimeListState> {
),
);
GetIt.I.get<NavigationBloc>().add(
PushedNamedAndRemoveUntilEvent(
const NavigationDestination(animeListRoute),
(_) => false,
),
GoNavigationEvent(animeListRoute),
);
}
}

View File

@@ -5,14 +5,12 @@ import 'package:anitrack/src/data/search_result.dart';
import 'package:anitrack/src/data/source.dart';
import 'package:anitrack/src/data/type.dart';
import 'package:anitrack/src/service/anilist/anilist_client.dart';
import 'package:anitrack/src/service/anilist/model.dart';
import 'package:anitrack/src/ui/bloc/anime_list_bloc.dart' as list;
import 'package:anitrack/src/ui/bloc/navigation_bloc.dart';
import 'package:anitrack/src/ui/constants.dart';
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:get_it/get_it.dart';
import 'package:jikan_api/jikan_api.dart';
part 'anime_search_state.dart';
part 'anime_search_event.dart';
@@ -43,9 +41,7 @@ class AnimeSearchBloc extends Bloc<AnimeSearchEvent, AnimeSearchState> {
);
GetIt.I.get<NavigationBloc>().add(
PushedNamedEvent(
const NavigationDestination(animeSearchRoute),
),
PushNavigationEvent(animeSearchRoute),
);
}
@@ -166,7 +162,7 @@ class AnimeSearchBloc extends Bloc<AnimeSearchEvent, AnimeSearchState> {
);
GetIt.I.get<NavigationBloc>().add(
PoppedRouteEvent(),
GoNavigationEvent(animeListRoute),
);
}
}

View File

@@ -44,9 +44,7 @@ class DetailsBloc extends Bloc<DetailsEvent, DetailsState> {
);
GetIt.I.get<NavigationBloc>().add(
PushedNamedEvent(
const NavigationDestination(detailsRoute),
),
GoNavigationEvent(detailsRoute),
);
}
@@ -63,9 +61,7 @@ class DetailsBloc extends Bloc<DetailsEvent, DetailsState> {
);
GetIt.I.get<NavigationBloc>().add(
PushedNamedEvent(
const NavigationDestination(detailsRoute),
),
PushNavigationEvent(detailsRoute),
);
}
@@ -126,7 +122,7 @@ class DetailsBloc extends Bloc<DetailsEvent, DetailsState> {
}
// Navigate back
GetIt.I.get<NavigationBloc>().add(PoppedRouteEvent());
GetIt.I.get<NavigationBloc>().add(PopNavigationEvent());
}
Future<void> _onAnimeWatcherAdded(

View File

@@ -1,57 +1,39 @@
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
part 'navigation_event.dart';
part 'navigation_state.dart';
class NavigationBloc extends Bloc<NavigationEvent, NavigationState> {
NavigationBloc(this.navigationKey) : super(NavigationState()) {
on<PushedNamedEvent>(_onPushedNamed);
on<PushedNamedAndRemoveUntilEvent>(_onPushedNamedAndRemoveUntil);
on<PushedNamedReplaceEvent>(_onPushedNamedReplaceEvent);
on<PoppedRouteEvent>(_onPoppedRoute);
NavigationBloc() : super(NoopNavigationState()) {
on<GoNavigationEvent>(_onGoEvent);
on<PushNavigationEvent>(_onPushEvent);
on<PopNavigationEvent>(_onPopEvent);
}
final GlobalKey<NavigatorState> navigationKey;
Future<void> _onPushedNamed(
PushedNamedEvent event,
Future<void> _onGoEvent(
GoNavigationEvent event,
Emitter<NavigationState> emit,
) async {
await navigationKey.currentState!.pushNamed(
event.destination.path,
arguments: event.destination.arguments,
emit(
GoNavigationState(event.destination),
);
}
Future<void> _onPushedNamedAndRemoveUntil(
PushedNamedAndRemoveUntilEvent event,
Future<void> _onPushEvent(
PushNavigationEvent event,
Emitter<NavigationState> emit,
) async {
await navigationKey.currentState!.pushNamedAndRemoveUntil(
event.destination.path,
event.predicate,
arguments: event.destination.arguments,
emit(
PushNavigationState(event.destination),
);
}
Future<void> _onPushedNamedReplaceEvent(
PushedNamedReplaceEvent event,
Future<void> _onPopEvent(
PopNavigationEvent event,
Emitter<NavigationState> emit,
) async {
await navigationKey.currentState!.pushReplacementNamed(
event.destination.path,
arguments: event.destination.arguments,
);
}
Future<void> _onPoppedRoute(
PoppedRouteEvent event,
Emitter<NavigationState> emit,
) async {
navigationKey.currentState!.pop();
}
bool canPop() {
return navigationKey.currentState!.canPop();
emit(PoppedNavigationState());
}
}

View File

@@ -11,20 +11,14 @@ class NavigationDestination {
abstract class NavigationEvent {}
class PushedNamedEvent extends NavigationEvent {
PushedNamedEvent(this.destination);
final NavigationDestination destination;
class GoNavigationEvent extends NavigationEvent {
GoNavigationEvent(this.destination);
final String destination;
}
class PushedNamedAndRemoveUntilEvent extends NavigationEvent {
PushedNamedAndRemoveUntilEvent(this.destination, this.predicate);
final NavigationDestination destination;
final RoutePredicate predicate;
class PushNavigationEvent extends NavigationEvent {
PushNavigationEvent(this.destination);
final String destination;
}
class PushedNamedReplaceEvent extends NavigationEvent {
PushedNamedReplaceEvent(this.destination);
final NavigationDestination destination;
}
class PoppedRouteEvent extends NavigationEvent {}
class PopNavigationEvent extends NavigationEvent {}

View File

@@ -1,3 +1,19 @@
part of 'navigation_bloc.dart';
class NavigationState {}
abstract class NavigationState {}
class NoopNavigationState extends NavigationState {}
class PoppedNavigationState extends NavigationState {}
class PushNavigationState extends NavigationState {
PushNavigationState(this.destination);
final String destination;
}
class GoNavigationState extends NavigationState {
GoNavigationState(this.destination);
final String destination;
}