3. Cài đặt nhận dữ liệu từ deeplink trên Flutter

0 0 0

Người đăng: Khang Tran

Theo Viblo Asia

Đây là service mình dùng để handle deeplink data:


class DeepLinkServices extends GetxController { DeepLinkServices._privateConstructor(); static final DeepLinkServices _instance = DeepLinkServices._privateConstructor(); static DeepLinkServices get instance => _instance; Uri? get initialLink => _initialLink; Uri? _initialLink; StreamSubscription<Uri>? _linkSubscription; bool _isInitialAppLinkHandled = false; @override void onInit() { super.onInit(); initialize(); } Future<void> initRoute() async { final appLinks = AppLinks(); _initialLink = await appLinks.getInitialLink(); } Future<void> initialize() async { final appLinks = AppLinks(); Logger.i('[Deep Link]: initialize'); // Check initial link if app was in cold state (terminated) if (!_isInitialAppLinkHandled) { _initialLink = await appLinks.getInitialLink(); if (_initialLink != null) { _isInitialAppLinkHandled = true; _handleLinkData(_initialLink!); } } // Handle link when app is in warm state (foreground or background) _linkSubscription = appLinks.uriLinkStream.listen( _handleLinkData, onError: (err) { Logger.e('[Deep Link]: Fail $err'); }, onDone: () { _linkSubscription?.cancel(); }, ); } @override void onClose() { _linkSubscription?.cancel(); super.onClose(); } /// Handles the link navigation Deep Links. void _handleLinkData(Uri uri) { Logger.i('[Deep Link] Handler: $uri'); // Parse the URI and navigate based on path final parsedPath = _parsePath(uri); if (parsedPath != null) { _handleNavigation(parsedPath); } } /// Parses the URI path to determine the type and ID Map<String, String>? _parsePath(Uri uri) { if (uri.pathSegments.isNotEmpty) { if (uri.pathSegments[0] == 'product') { return { 'type': 'product', 'id': uri.pathSegments.last, }; } else if (uri.pathSegments[0] == 'user') { return { 'type': 'user', 'id': uri.pathSegments.last, }; } } return null; } /// Navigate based on parsed path void _handleNavigation(Map<String, String> parsedPath) { final type = parsedPath['type']; final id = parsedPath['id']; Logger.e('[Deep Link] type: $type = id: $id'); if (type == 'product' && id != null) { navigatorKey.currentState?.context.navigateTo( RoutePath.requestProductScreen, routeSettings: RouteSettings( arguments: ProductInviteArgument(int.parse(id)), ) ); } else if (type == 'user' && id != null) { // Navigate to user screen final userModel = UserModel(userId: int.tryParse(id)); navigatorKey.currentState?.context.navigateTo( RoutePath.userDetailScreen, routeSettings: RouteSettings( arguments: UserDetailArgument(userModel), ), ); } else { Logger.e('[Deep Link] Unknown path: $type'); } }
} 

Ngoài file main.dart, init service này lên :

 await DeepLinkServices.instance.initRoute();

Vậy là xong, để điều hướng đi chỗ khác thì bn chỉnh lại code trong service đến trang mình cần.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Flutter - Implement Deeplink

Giới thiệu. Đối với lập trình viên mobile thì việc làm việc với deepkink hay applink là một điều không thể tránh khỏi.

0 0 96

- vừa được xem lúc

Deep Link với Firebase Dynamic Links và Branch.io Links

Câu chuyện nguồn gốc của Deeplink . Theo thống kê, mỗi tháng có hơn 100k app được upload lên Google Play và khoảng 30k app lên App Store.

0 0 185

- vừa được xem lúc

Tìm hiểu về lỗ hổng bảo mật của Deep Link

1. Deep Link là gì.

0 0 18

2. Cài đặt cấu hình Deeplink trong native app Android, iOS

Như ở phần 1 tôi đã chia sẻ cách cài đặt rất chi tiết ở Server. Native Android. mở file Manifest.xml lên và thêm đoạn tag sau ở Trong thẻ <Activity>.

0 0 0

2. Cài đặt cấu hình Deeplink trong native app Android, iOS

Như ở phần 1 tôi đã chia sẻ cách cài đặt rất chi tiết ở Server. Native Android. mở file Manifest.xml lên và thêm đoạn tag sau ở Trong thẻ <Activity>.

0 0 0

2. Cài đặt cấu hình Deeplink trong native app Android, iOS

Như ở phần 1 tôi đã chia sẻ cách cài đặt rất chi tiết ở Server. Native Android. mở file Manifest.xml lên và thêm đoạn tag sau ở Trong thẻ <Activity>.

0 0 0