mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-27 17:20:26 +08:00
Add a CustomRouteObserver
This basically asserts if we move to a route without a name. This way I'll always catch when a route doesn't have a name, and I can start getting better analytics on which screens are used most frequently.
This commit is contained in:
@ -1,4 +1,6 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'package:gitjournal/app.dart';
|
||||
import 'package:gitjournal/error_reporting.dart';
|
||||
@ -85,3 +87,41 @@ void logEvent(Event event, {Map<String, String> parameters}) {
|
||||
getAnalytics().log(e: event, parameters: parameters);
|
||||
Log.d("Event $event");
|
||||
}
|
||||
|
||||
class CustomRouteObserver extends RouteObserver<PageRoute<dynamic>> {
|
||||
void _sendScreenView(PageRoute<dynamic> route) {
|
||||
final String screenName = route.settings.name;
|
||||
assert(screenName != null, "Screen name is null $route");
|
||||
}
|
||||
|
||||
@override
|
||||
void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
|
||||
super.didPush(route, previousRoute);
|
||||
if (route is PageRoute) {
|
||||
_sendScreenView(route);
|
||||
} else {
|
||||
print("route in not a PageRoute! $route");
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) {
|
||||
super.didReplace(newRoute: newRoute, oldRoute: oldRoute);
|
||||
if (newRoute is PageRoute) {
|
||||
_sendScreenView(newRoute);
|
||||
} else {
|
||||
print("newRoute in not a PageRoute! $newRoute");
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
|
||||
super.didPop(route, previousRoute);
|
||||
if (previousRoute is PageRoute && route is PageRoute) {
|
||||
_sendScreenView(previousRoute);
|
||||
} else {
|
||||
print("previousRoute in not a PageRoute! $previousRoute");
|
||||
print("route in not a PageRoute! $route");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -288,7 +288,10 @@ class _JournalAppState extends State<JournalApp> {
|
||||
locale: EasyLocalization.of(context).locale,
|
||||
|
||||
theme: themeData,
|
||||
navigatorObservers: <NavigatorObserver>[JournalApp.observer],
|
||||
navigatorObservers: <NavigatorObserver>[
|
||||
JournalApp.observer,
|
||||
CustomRouteObserver(),
|
||||
],
|
||||
initialRoute: initialRoute,
|
||||
debugShowCheckedModeBanner: false,
|
||||
//debugShowMaterialGrid: true,
|
||||
|
@ -64,6 +64,7 @@ Widget buildFolderView(
|
||||
void openNoteEditor(BuildContext context, Note note) async {
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) => NoteEditor.fromNote(note),
|
||||
settings: const RouteSettings(name: '/note/'),
|
||||
);
|
||||
var showUndoSnackBar = await Navigator.of(context).push(route);
|
||||
if (showUndoSnackBar != null) {
|
||||
|
@ -32,6 +32,7 @@ class _FolderListingScreenState extends State<FolderListingScreen> {
|
||||
builder: (context) => FolderView(
|
||||
notesFolder: folder,
|
||||
),
|
||||
settings: const RouteSettings(name: '/folder/'),
|
||||
);
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
|
@ -10,6 +10,7 @@ import 'package:gitjournal/core/sorting_mode.dart';
|
||||
import 'package:gitjournal/folder_views/standard_view.dart';
|
||||
import 'package:gitjournal/screens/note_editor.dart';
|
||||
import 'package:gitjournal/screens/settings_screen.dart';
|
||||
import 'package:gitjournal/settings.dart';
|
||||
import 'package:gitjournal/state_container.dart';
|
||||
import 'package:gitjournal/utils.dart';
|
||||
import 'package:gitjournal/widgets/app_drawer.dart';
|
||||
@ -207,8 +208,11 @@ class _FolderViewState extends State<FolderView> {
|
||||
fsFolder = getFolderForEditor(rootFolder, editorType);
|
||||
}
|
||||
|
||||
var routeType =
|
||||
SettingsEditorType.fromEditorType(editorType).toInternalString();
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) => NoteEditor.newNote(fsFolder, editorType),
|
||||
settings: RouteSettings(name: '/newNote/$routeType'),
|
||||
);
|
||||
await Navigator.of(context).push(route);
|
||||
_scaffoldKey.currentState.removeCurrentSnackBar();
|
||||
|
@ -356,6 +356,7 @@ class NoteEditorState extends State<NoteEditor> {
|
||||
selectedTags: note.tags,
|
||||
allTags: allTags,
|
||||
),
|
||||
settings: const RouteSettings(name: '/editTags/'),
|
||||
);
|
||||
var newTags = await Navigator.of(context).push(route);
|
||||
assert(newTags != null);
|
||||
|
@ -184,6 +184,7 @@ class SettingsListState extends State<SettingsList> {
|
||||
onTap: () {
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) => GitRemoteSettingsScreen(),
|
||||
settings: const RouteSettings(name: '/settings/gitRemote'),
|
||||
);
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
@ -196,6 +197,7 @@ class SettingsListState extends State<SettingsList> {
|
||||
onTap: () {
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) => SettingsEditorsScreen(),
|
||||
settings: const RouteSettings(name: '/settings/editors'),
|
||||
);
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
@ -219,6 +221,7 @@ class SettingsListState extends State<SettingsList> {
|
||||
onTap: () {
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) => NoteMetadataSettingsScreen(),
|
||||
settings: const RouteSettings(name: '/settings/noteMetaData'),
|
||||
);
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
@ -229,6 +232,7 @@ class SettingsListState extends State<SettingsList> {
|
||||
onTap: () {
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) => SettingsImagesScreen(),
|
||||
settings: const RouteSettings(name: '/settings/images'),
|
||||
);
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
@ -260,6 +264,7 @@ class SettingsListState extends State<SettingsList> {
|
||||
onTap: () {
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) => DebugScreen(),
|
||||
settings: const RouteSettings(name: '/settings/debug'),
|
||||
);
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
|
@ -43,7 +43,8 @@ class TagListingScreen extends StatelessWidget {
|
||||
leading: FaIcon(FontAwesomeIcons.tag, color: titleColor),
|
||||
title: Text(tag),
|
||||
onTap: () {
|
||||
var route = MaterialPageRoute(builder: (context) {
|
||||
var route = MaterialPageRoute(
|
||||
builder: (context) {
|
||||
var rootFolder = Provider.of<NotesFolderFS>(context);
|
||||
var folder = FlattenedNotesFolder(
|
||||
rootFolder,
|
||||
@ -52,7 +53,9 @@ class TagListingScreen extends StatelessWidget {
|
||||
);
|
||||
|
||||
return FolderView(notesFolder: folder);
|
||||
});
|
||||
},
|
||||
settings: const RouteSettings(name: '/tags/'),
|
||||
);
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
);
|
||||
|
Reference in New Issue
Block a user