Deep linking
This commit is contained in:
parent
3403077dd4
commit
5952a79e8c
|
|
@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:invoiceninja_flutter/.env.dart';
|
import 'package:invoiceninja_flutter/.env.dart';
|
||||||
import 'package:invoiceninja_flutter/constants.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/data/models/serializers.dart';
|
||||||
import 'package:invoiceninja_flutter/main_app.dart';
|
import 'package:invoiceninja_flutter/main_app.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_middleware.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;
|
bool reportErrors = false;
|
||||||
if (kIsWeb) {
|
if (kIsWeb) {
|
||||||
reportErrors = WebUtils.getHtmlValue('report-errors') == '1';
|
reportErrors = WebUtils.getHtmlValue('report-errors') == '1';
|
||||||
|
|
@ -151,5 +167,6 @@ Future<AppState> _initialState(bool isTesting) async {
|
||||||
prefState: prefState,
|
prefState: prefState,
|
||||||
url: Config.DEMO_MODE ? '' : url,
|
url: Config.DEMO_MODE ? '' : url,
|
||||||
reportErrors: reportErrors,
|
reportErrors: reportErrors,
|
||||||
|
currentRoute: browserRoute,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -184,6 +184,7 @@ Middleware<AppState> _createLoadState(
|
||||||
final action = dynamicAction as LoadStateRequest;
|
final action = dynamicAction as LoadStateRequest;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
final state = store.state;
|
||||||
final prefs = await SharedPreferences.getInstance();
|
final prefs = await SharedPreferences.getInstance();
|
||||||
final appVersion = prefs.getString(kSharedPrefAppVersion);
|
final appVersion = prefs.getString(kSharedPrefAppVersion);
|
||||||
|
|
||||||
|
|
@ -204,7 +205,7 @@ Middleware<AppState> _createLoadState(
|
||||||
throw 'New app version - clearing state';
|
throw 'New app version - clearing state';
|
||||||
}
|
}
|
||||||
|
|
||||||
var prefState = store.state.prefState;
|
final prefState = state.prefState;
|
||||||
authState = await authRepository.loadAuthState();
|
authState = await authRepository.loadAuthState();
|
||||||
uiState = await uiRepository.loadUIState();
|
uiState = await uiRepository.loadUIState();
|
||||||
staticState = await staticRepository.loadStaticState();
|
staticState = await staticRepository.loadStaticState();
|
||||||
|
|
@ -212,18 +213,10 @@ Middleware<AppState> _createLoadState(
|
||||||
companyStates.add(await companyRepositories[i].loadCompanyState(i));
|
companyStates.add(await companyRepositories[i].loadCompanyState(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kIsWeb && prefState.isDesktop) {
|
// Carry over a deeplink URL on the web
|
||||||
var browserRoute = WebUtils.browserRoute;
|
if (state.uiState.currentRoute != LoginScreen.route) {
|
||||||
if (browserRoute.isNotEmpty && browserRoute.length > 4) {
|
uiState = uiState
|
||||||
if (browserRoute == '/kanban') {
|
.rebuild((b) => b..currentRoute = state.uiState.currentRoute);
|
||||||
browserRoute = '/task';
|
|
||||||
prefState = prefState.rebuild((b) => b
|
|
||||||
..showKanban = true
|
|
||||||
..useSidebarEditor[EntityType.task] = true);
|
|
||||||
}
|
|
||||||
|
|
||||||
uiState = uiState.rebuild((b) => b..currentRoute = browserRoute);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final AppState appState = AppState(
|
final AppState appState = AppState(
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,7 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
|
||||||
@required PrefState prefState,
|
@required PrefState prefState,
|
||||||
@required bool reportErrors,
|
@required bool reportErrors,
|
||||||
String url,
|
String url,
|
||||||
|
String currentRoute,
|
||||||
}) {
|
}) {
|
||||||
return _$AppState._(
|
return _$AppState._(
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
|
|
@ -106,7 +107,7 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
|
||||||
List<int>.generate(kMaxNumberOfCompanies, (i) => i + 1)
|
List<int>.generate(kMaxNumberOfCompanies, (i) => i + 1)
|
||||||
.map((index) => UserCompanyState(reportErrors))
|
.map((index) => UserCompanyState(reportErrors))
|
||||||
.toList()),
|
.toList()),
|
||||||
uiState: UIState(),
|
uiState: UIState(currentRoute: currentRoute),
|
||||||
prefState: prefState ?? PrefState(),
|
prefState: prefState ?? PrefState(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,11 @@ import 'package:invoiceninja_flutter/utils/strings.dart';
|
||||||
part 'ui_state.g.dart';
|
part 'ui_state.g.dart';
|
||||||
|
|
||||||
abstract class UIState implements Built<UIState, UIStateBuilder> {
|
abstract class UIState implements Built<UIState, UIStateBuilder> {
|
||||||
factory UIState() {
|
factory UIState({String currentRoute}) {
|
||||||
return _$UIState._(
|
return _$UIState._(
|
||||||
selectedCompanyIndex: 0,
|
selectedCompanyIndex: 0,
|
||||||
filterClearedAt: 0,
|
filterClearedAt: 0,
|
||||||
currentRoute: LoginScreen.route,
|
currentRoute: currentRoute ?? LoginScreen.route,
|
||||||
previousRoute: '',
|
previousRoute: '',
|
||||||
previewStack: BuiltList<EntityType>(),
|
previewStack: BuiltList<EntityType>(),
|
||||||
dashboardUIState: DashboardUIState(),
|
dashboardUIState: DashboardUIState(),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue