Skip to content

Commit

Permalink
feat(tracker): Add one navigator observer (#96)
Browse files Browse the repository at this point in the history
* feat(tracker): Add one navigator observer

* test: Add a test for navigatorObserver
  • Loading branch information
riscait authored Jul 9, 2024
1 parent 2727bf9 commit f95ca05
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 6 deletions.
19 changes: 15 additions & 4 deletions packages/altfire_tracker/lib/src/tracker.dart
Original file line number Diff line number Diff line change
Expand Up @@ -136,16 +136,27 @@ class Tracker {
}
}

/// Returns a list of NavigatorObservers to register with Navigator.
/// Returns a FirebaseAnalyticsObserver as NavigatorObserver.
/// Use [nameExtractor] to set the parameter value to send.
NavigatorObserver navigatorObserver({
String? Function(RouteSettings) nameExtractor = defaultNameExtractor,
bool Function(Route<dynamic>?) routeFilter = defaultRouteFilter,
}) {
return FirebaseAnalyticsObserver(
analytics: _analytics,
nameExtractor: nameExtractor,
routeFilter: routeFilter,
);
}

/// Returns a list of NavigatorObservers with FirebaseAnalyticsObserver.
/// Use [nameExtractor] to set the parameter value to send.
List<NavigatorObserver> navigatorObservers({
String? Function(RouteSettings) nameExtractor = defaultNameExtractor,
bool Function(Route<dynamic>?) routeFilter = defaultRouteFilter,
}) {
return [
// Returns a NavigatorObserver of FirebaseAnalytics.
FirebaseAnalyticsObserver(
analytics: _analytics,
navigatorObserver(
nameExtractor: nameExtractor,
routeFilter: routeFilter,
),
Expand Down
26 changes: 24 additions & 2 deletions packages/altfire_tracker/test/src/tracker_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,26 @@ void main() {
verifyNoMoreInteractions(analytics);
});

test('navigatorObserver should return a FirebaseAnalyticsObserver',
() async {
final crashlytics = MockFirebaseCrashlytics();
final analytics = MockFirebaseAnalytics();
final tracker = Tracker(
crashlytics: crashlytics,
analytics: analytics,
);

String nameExtractor(RouteSettings settings) => settings.name!;
bool routerFilter(Route<dynamic>? route) => route != null;
final got = tracker.navigatorObserver(
nameExtractor: nameExtractor,
routeFilter: routerFilter,
);

expect(got, isA<NavigatorObserver>());
expect(got, isA<FirebaseAnalyticsObserver>());
});

test('navigatorObservers should return a list of NavigatorObservers',
() async {
final crashlytics = MockFirebaseCrashlytics();
Expand All @@ -261,8 +281,10 @@ void main() {
);

expect(got, isA<List<NavigatorObserver>>());
expect(got.length, 1);
expect(got[0], isA<FirebaseAnalyticsObserver>());
expect(
got.whereType<FirebaseAnalyticsObserver>(),
hasLength(1),
);
});

test('trackScreenView should call setCurrentScreen on analytics', () async {
Expand Down

0 comments on commit f95ca05

Please sign in to comment.