diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index c7c4c6a..bf26010 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -106,7 +106,7 @@
-
+
diff --git a/lib/main.dart b/lib/main.dart
index f1da55e..9aec6c2 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -3,8 +3,6 @@
import 'dart:async';
import 'dart:io';
-import 'package:android_intent_plus/android_intent.dart';
-import 'package:app_links/app_links.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:didvan/config/theme_data.dart';
import 'package:didvan/firebase_options.dart';
@@ -35,18 +33,19 @@ import 'package:provider/provider.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
+// پکیج جدید برای Deep Linking
+import 'package:app_links/app_links.dart';
+
final GlobalKey navigatorKey = GlobalKey();
+// متغیر استاتیک برای نگهداری لینک اولیه
+Uri? initialURI;
+
@pragma('vm:entry-point')
Future _backgroundCallbackHomeWidget(Uri? uri) async {
- await HomeWidget.saveWidgetData("uri", uri!.host);
- AndroidIntent intent = const AndroidIntent(
- action: 'android.intent.action.RUN',
- package: 'com.didvan.didvanapp',
- componentName: 'com.didvan.didvanapp.MainActivity',
- );
- await intent.launch();
- return;
+ if (uri != null) {
+ await HomeWidget.saveWidgetData("uri", uri.host);
+ }
}
void main() async {
@@ -59,10 +58,8 @@ void main() async {
try {
if (Platform.isAndroid) {
await FlutterDownloader.initialize(
- debug:
- true,
- ignoreSsl:
- true
+ debug: true,
+ ignoreSsl: true
);
}
} catch (e) {
@@ -74,7 +71,7 @@ void main() async {
options: DefaultFirebaseOptions.currentPlatform);
await FirebaseApi().initNotification();
} catch (e) {
- debugPrint;
+ debugPrint(e.toString());
}
await SentryFlutter.init(
@@ -98,38 +95,33 @@ class Didvan extends StatefulWidget {
class _DidvanState extends State with WidgetsBindingObserver {
late AppLinks _appLinks;
StreamSubscription? _linkSubscription;
- @override
- void didChangeDependencies() {
- super.didChangeDependencies();
- }
@override
void initState() {
- WidgetsBinding.instance.addObserver(this);
super.initState();
+ WidgetsBinding.instance.addObserver(this);
+ // مقداردهی اولیه و گوش دادن به لینکها در اینجا انجام میشود
_initDeepLinks();
}
-
+
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
- _linkSubscription?.cancel();
+ _linkSubscription?.cancel(); // لغو کردن subscription
if (MediaService.currentPodcast != null) {
MediaService.audioPlayer.dispose();
}
super.dispose();
}
-
+
+ /// منطق جدید برای مدیریت لینکها با app_links
Future _initDeepLinks() async {
_appLinks = AppLinks();
- // بررسی لینک اولیه در زمان باز شدن اپلیکیشن
- final initialUri = await _appLinks.getInitialLink();
- if (initialUri != null) {
- _navigateTo(initialUri);
- }
+ // لینک اولیه را فقط در متغیر ذخیره میکنیم
+ initialURI = await _appLinks.getInitialLink();
- // گوش دادن به لینکهای جدید زمانی که اپلیکیشن در حال اجراست
+ // به لینکهای جدید زمانی که اپلیکیشن باز است گوش میدهیم
_linkSubscription = _appLinks.uriLinkStream.listen((uri) {
_navigateTo(uri);
});
@@ -146,9 +138,6 @@ class _DidvanState extends State with WidgetsBindingObserver {
}
}
-
- bool b = true;
-
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
if (!kIsWeb) {
@@ -171,33 +160,15 @@ class _DidvanState extends State with WidgetsBindingObserver {
Widget build(BuildContext context) {
return MultiProvider(
providers: [
- ChangeNotifierProvider(
- create: (context) => PodcastsState(),
- ),
- ChangeNotifierProvider(
- create: (context) => MediaProvider(),
- ),
- ChangeNotifierProvider(
- create: (context) => UserProvider(),
- ),
- ChangeNotifierProvider(
- create: (context) => ThemeProvider(),
- ),
- ChangeNotifierProvider(
- create: (context) => StudioDetailsState(),
- ),
- ChangeNotifierProvider(
- create: (context) => HistoryAiChatState(),
- ),
- ChangeNotifierProvider(
- create: (context) => AiState(),
- ),
- ChangeNotifierProvider(
- create: (context) => AiChatState(),
- ),
- ChangeNotifierProvider(
- create: (context) => BotAssistantsState(),
- ),
+ ChangeNotifierProvider(create: (context) => PodcastsState()),
+ ChangeNotifierProvider(create: (context) => MediaProvider()),
+ ChangeNotifierProvider(create: (context) => UserProvider()),
+ ChangeNotifierProvider(create: (context) => ThemeProvider()),
+ ChangeNotifierProvider(create: (context) => StudioDetailsState()),
+ ChangeNotifierProvider(create: (context) => HistoryAiChatState()),
+ ChangeNotifierProvider(create: (context) => AiState()),
+ ChangeNotifierProvider(create: (context) => AiChatState()),
+ ChangeNotifierProvider(create: (context) => BotAssistantsState()),
],
child: Consumer(
builder: (context, themeProvider, child) => Container(
@@ -243,4 +214,4 @@ class _DidvanState extends State with WidgetsBindingObserver {
),
);
}
-}
\ No newline at end of file
+}
diff --git a/lib/views/splash/splash.dart b/lib/views/splash/splash.dart
index d7eedb1..d6e7aa8 100644
--- a/lib/views/splash/splash.dart
+++ b/lib/views/splash/splash.dart
@@ -1,5 +1,3 @@
-// ignore_for_file: deprecated_member_use
-
import 'package:didvan/config/design_config.dart';
import 'package:didvan/constants/assets.dart';
import 'package:didvan/main.dart';
@@ -89,9 +87,6 @@ class _SplashState extends State {
Future _initialize(ThemeProvider themeProvider,
UserProvider userProvider, MediaProvider mediaProvider) async {
try {
- // if (!kIsWeb) {
- // await AppInitializer.onCheckUpdate(context);
- // }
if (kIsWeb) {
html.window.onBeforeUnload.listen((event) {
StorageService.webStorage
@@ -135,26 +130,29 @@ class _SplashState extends State {
await ServerDataProvider.getData();
}
+
+ // --- بخش اصلاح شده ---
+ // ابتدا بررسی میکنیم که کاربر باید به کدام صفحه اصلی برود
+ final String destinationRoute = token == null ? Routes.authenticaion : Routes.home;
+ final dynamic routeArguments = token == null ? false : {'showDialogs': true};
- navigatorKey.currentState!.pushReplacementNamed(
- token == null ? Routes.authenticaion : Routes.home,
- arguments: token == null ? false : null,
+ // اگر لینک ورودی وجود داشت، آن را به عنوان آرگومان به صفحه Home میفرستیم
+ if (destinationRoute == Routes.home && initialURI != null) {
+ (routeArguments as Map)['deepLinkUri'] = initialURI;
+ initialURI = null; // لینک را مصرف میکنیم تا دوباره استفاده نشود
+ }
+
+ // در نهایت به مسیر تعیین شده میرویم
+ await navigatorKey.currentState!.pushReplacementNamed(
+ destinationRoute,
+ arguments: routeArguments,
);
+ // --- پایان بخش اصلاح شده ---
- return;
-
- // await HomeWidget.getWidgetData("cRouteGoTo", defaultValue: '')
- // .then((cRouteGoTo) async {
- // if (cRouteGoTo!.isNotEmpty) {
- // navigatorKey.currentState!
- // .pushNamed(cRouteGoTo.toString(), arguments:cRouteArgs );
- // HomeWidget.saveWidgetData("cRouteGoTo", '');
- // }
- // });
} catch (e) {
setState(() {
_errorOccured = true;
});
}
}
-}
+}
\ No newline at end of file
diff --git a/web/.well-known/assetlinks.json b/web/.well-known/assetlinks.json
new file mode 100644
index 0000000..17c30de
--- /dev/null
+++ b/web/.well-known/assetlinks.json
@@ -0,0 +1,13 @@
+[
+ {
+ "relation": ["delegate_permission/common.handle_all_urls"],
+ "target": {
+ "namespace": "android_app",
+ "package_name": "com.didvan.didvanapp",
+ "sha256_cert_fingerprints": [
+ "02:5A:86:49:AE:B4:FF:FE:5B:D0:C6:D7:F9:FF:85:60:F0:CF:AE:2F:39:8C:9D:F6:0D:4A:41:5D:EA:07:BE:8B",
+ "CA:F0:F8:9D:6D:5C:70:A1:C0:E8:F6:4D:19:DA:49:12:D4:F9:D6:C1:DB:E7:1C:B5:4B:ED:F5:A5:AA:DA:EE:DB"
+ ]
+ }
+ }
+]
\ No newline at end of file