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: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,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
Loading…
Reference in New Issue