Deep linking

This commit is contained in:
Hillel Coren 2021-04-19 16:15:23 +03:00
parent 3403077dd4
commit 5952a79e8c
4 changed files with 27 additions and 16 deletions

View File

@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/.env.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/serializers.dart';
import 'package:invoiceninja_flutter/main_app.dart';
import 'package:invoiceninja_flutter/redux/app/app_middleware.dart';
@ -139,6 +140,21 @@ Future<AppState> _initialState(bool isTesting) async {
}
}
String browserRoute;
if (kIsWeb && prefState.isDesktop) {
browserRoute = WebUtils.browserRoute;
if (browserRoute.isNotEmpty && browserRoute.length > 4) {
if (browserRoute == '/kanban') {
browserRoute = '/task';
prefState = prefState.rebuild((b) => b
..showKanban = true
..useSidebarEditor[EntityType.task] = true);
}
} else {
browserRoute = null;
}
}
bool reportErrors = false;
if (kIsWeb) {
reportErrors = WebUtils.getHtmlValue('report-errors') == '1';
@ -151,5 +167,6 @@ Future<AppState> _initialState(bool isTesting) async {
prefState: prefState,
url: Config.DEMO_MODE ? '' : url,
reportErrors: reportErrors,
currentRoute: browserRoute,
);
}

View File

@ -184,6 +184,7 @@ Middleware<AppState> _createLoadState(
final action = dynamicAction as LoadStateRequest;
try {
final state = store.state;
final prefs = await SharedPreferences.getInstance();
final appVersion = prefs.getString(kSharedPrefAppVersion);
@ -204,7 +205,7 @@ Middleware<AppState> _createLoadState(
throw 'New app version - clearing state';
}
var prefState = store.state.prefState;
final prefState = state.prefState;
authState = await authRepository.loadAuthState();
uiState = await uiRepository.loadUIState();
staticState = await staticRepository.loadStaticState();
@ -212,18 +213,10 @@ Middleware<AppState> _createLoadState(
companyStates.add(await companyRepositories[i].loadCompanyState(i));
}
if (kIsWeb && prefState.isDesktop) {
var browserRoute = WebUtils.browserRoute;
if (browserRoute.isNotEmpty && browserRoute.length > 4) {
if (browserRoute == '/kanban') {
browserRoute = '/task';
prefState = prefState.rebuild((b) => b
..showKanban = true
..useSidebarEditor[EntityType.task] = true);
}
uiState = uiState.rebuild((b) => b..currentRoute = browserRoute);
}
// Carry over a deeplink URL on the web
if (state.uiState.currentRoute != LoginScreen.route) {
uiState = uiState
.rebuild((b) => b..currentRoute = state.uiState.currentRoute);
}
final AppState appState = AppState(

View File

@ -94,6 +94,7 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
@required PrefState prefState,
@required bool reportErrors,
String url,
String currentRoute,
}) {
return _$AppState._(
isLoading: false,
@ -106,7 +107,7 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
List<int>.generate(kMaxNumberOfCompanies, (i) => i + 1)
.map((index) => UserCompanyState(reportErrors))
.toList()),
uiState: UIState(),
uiState: UIState(currentRoute: currentRoute),
prefState: prefState ?? PrefState(),
);
}

View File

@ -40,11 +40,11 @@ import 'package:invoiceninja_flutter/utils/strings.dart';
part 'ui_state.g.dart';
abstract class UIState implements Built<UIState, UIStateBuilder> {
factory UIState() {
factory UIState({String currentRoute}) {
return _$UIState._(
selectedCompanyIndex: 0,
filterClearedAt: 0,
currentRoute: LoginScreen.route,
currentRoute: currentRoute ?? LoginScreen.route,
previousRoute: '',
previewStack: BuiltList<EntityType>(),
dashboardUIState: DashboardUIState(),