fix: Open deep links
This commit is contained in:
parent
47ac9c8f97
commit
1e763f05f5
11 changed files with 37 additions and 72 deletions
|
|
@ -170,8 +170,14 @@ abstract class AppRoutes {
|
|||
),
|
||||
GoRoute(
|
||||
path: 'newprivatechat',
|
||||
pageBuilder: (context, state) =>
|
||||
defaultPageBuilder(context, state, const NewPrivateChat()),
|
||||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
NewPrivateChat(
|
||||
key: ValueKey('new_chat_${state.uri.query}'),
|
||||
deeplink: state.uri.queryParameters['deeplink'],
|
||||
),
|
||||
),
|
||||
redirect: loggedOutRedirect,
|
||||
),
|
||||
GoRoute(
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import 'dart:async';
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'package:app_links/app_links.dart';
|
||||
import 'package:cross_file/cross_file.dart';
|
||||
import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
|
@ -11,6 +11,7 @@ import 'package:matrix/matrix.dart' as sdk;
|
|||
import 'package:matrix/matrix.dart';
|
||||
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pages/chat_list/chat_list_view.dart';
|
||||
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
||||
|
|
@ -71,8 +72,6 @@ class ChatListController extends State<ChatList>
|
|||
|
||||
StreamSubscription? _intentFileStreamSubscription;
|
||||
|
||||
StreamSubscription? _intentUriStreamSubscription;
|
||||
|
||||
late ActiveFilter activeFilter;
|
||||
|
||||
String? _activeSpaceId;
|
||||
|
|
@ -308,6 +307,12 @@ class ChatListController extends State<ChatList>
|
|||
void _processIncomingSharedMedia(List<SharedMediaFile> files) {
|
||||
if (files.isEmpty) return;
|
||||
|
||||
if (files.singleOrNull?.path.startsWith(AppConfig.deepLinkPrefix) == true) {
|
||||
return;
|
||||
}
|
||||
|
||||
inspect(files);
|
||||
|
||||
showScaffoldDialog(
|
||||
context: context,
|
||||
builder: (context) => ShareScaffoldDialog(
|
||||
|
|
@ -326,14 +331,6 @@ class ChatListController extends State<ChatList>
|
|||
);
|
||||
}
|
||||
|
||||
Future<void> _processIncomingUris(Uri? uri) async {
|
||||
if (uri == null) return;
|
||||
context.go('/rooms');
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
UrlLauncher(context, uri.toString()).openMatrixToUrl();
|
||||
});
|
||||
}
|
||||
|
||||
void _initReceiveSharingIntent() {
|
||||
if (!PlatformInfos.isMobile) return;
|
||||
|
||||
|
|
@ -347,11 +344,6 @@ class ChatListController extends State<ChatList>
|
|||
_processIncomingSharedMedia,
|
||||
);
|
||||
|
||||
// For receiving shared Uris
|
||||
_intentUriStreamSubscription = AppLinks().uriLinkStream.listen(
|
||||
_processIncomingUris,
|
||||
);
|
||||
|
||||
if (PlatformInfos.isAndroid) {
|
||||
final shortcuts = FlutterShortcuts();
|
||||
shortcuts.initialize().then(
|
||||
|
|
@ -394,7 +386,6 @@ class ChatListController extends State<ChatList>
|
|||
void dispose() {
|
||||
_intentDataStreamSubscription?.cancel();
|
||||
_intentFileStreamSubscription?.cancel();
|
||||
_intentUriStreamSubscription?.cancel();
|
||||
scrollController.removeListener(_onScroll);
|
||||
super.dispose();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ import 'package:fluffychat/widgets/matrix.dart';
|
|||
import '../../widgets/adaptive_dialogs/user_dialog.dart';
|
||||
|
||||
class NewPrivateChat extends StatefulWidget {
|
||||
const NewPrivateChat({super.key});
|
||||
final String? deeplink;
|
||||
const NewPrivateChat({super.key, required this.deeplink});
|
||||
|
||||
@override
|
||||
NewPrivateChatController createState() => NewPrivateChatController();
|
||||
|
|
@ -33,6 +34,18 @@ class NewPrivateChatController extends State<NewPrivateChat> {
|
|||
|
||||
static const Duration _coolDown = Duration(milliseconds: 500);
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
final deeplink = widget.deeplink;
|
||||
if (deeplink != null) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
UrlLauncher(context, deeplink).openMatrixToUrl();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> searchUsers([String? input]) async {
|
||||
final searchTerm = input ?? controller.text;
|
||||
if (searchTerm.isEmpty) {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
|
|||
import 'package:matrix/matrix.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/routes.dart';
|
||||
import 'package:fluffychat/config/setting_keys.dart';
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
|
|
@ -37,6 +38,12 @@ class FluffyChatApp extends StatelessWidget {
|
|||
static final GoRouter router = GoRouter(
|
||||
routes: AppRoutes.routes,
|
||||
debugLogDiagnostics: true,
|
||||
redirect: (context, state) {
|
||||
if (state.uri.toString().startsWith(AppConfig.deepLinkPrefix)) {
|
||||
return '/rooms/newprivatechat?deeplink=${state.uri}';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
);
|
||||
|
||||
@override
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue