fix: Fix routing
This commit is contained in:
@@ -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),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user