From b2961ca7d813e23d08beed89ce94d54de214fae9 Mon Sep 17 00:00:00 2001 From: mohamadmahdi jebeli Date: Tue, 15 Jul 2025 16:56:05 +0330 Subject: [PATCH] fixed news and radar web route --- .vscode/launch.json | 15 ++++++++ lib/main.dart | 22 +++++++----- lib/views/home/home_state.dart | 5 +++ lib/views/home/main/main_page.dart | 44 ++++++++++++++++-------- lib/views/home/main/main_page_state.dart | 13 +++++-- lib/views/splash/splash.dart | 6 ++-- 6 files changed, 76 insertions(+), 29 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2ba986f --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index fa8ad8d..b7c514e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -38,6 +38,8 @@ import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:app_links/app_links.dart'; +import 'services/network/request.dart'; + final GlobalKey navigatorKey = GlobalKey(); Uri? initialURI; @@ -126,6 +128,16 @@ class _DidvanState extends State with WidgetsBindingObserver { void _navigateTo(Uri uri) { if (mounted) { String path = uri.path; + final Map params = uri.queryParameters; + + final String? token = params['token']; + + if (token != null) { + //todo: this didnt work + print("DEBUG: received token in url, token: $token, path: $path"); + RequestService.token = token; + } + if (path.startsWith('/news/')) { final id = path.split('/news/').last; if (id.isNotEmpty) { @@ -134,13 +146,7 @@ class _DidvanState extends State with WidgetsBindingObserver { arguments: {'id': int.parse(id), 'args': const NewsRequestArgs(page: 0)}, ); } - } else { - navigatorKey.currentState?.pushNamed(path); - } - } - if (mounted) { - String path = uri.path; - if (path.startsWith('/radar/')) { + } else if (path.startsWith('/radar/')) { final id = path.split('/radar/').last; if (id.isNotEmpty) { navigatorKey.currentState?.pushNamed( @@ -148,8 +154,6 @@ class _DidvanState extends State with WidgetsBindingObserver { arguments: {'id': int.parse(id), 'args': const RadarRequestArgs(page: 0)}, ); } - } else { - navigatorKey.currentState?.pushNamed(path); } } } diff --git a/lib/views/home/home_state.dart b/lib/views/home/home_state.dart index 5214bf4..96ff205 100644 --- a/lib/views/home/home_state.dart +++ b/lib/views/home/home_state.dart @@ -82,6 +82,7 @@ class HomeState extends CoreProvier { ); await service.httpGet(); if (service.isSuccess) { + print("DEBUG : Homestate is succes"); lastPage = service.result['lastPage']; results.addAll( List.from( @@ -94,12 +95,14 @@ class HomeState extends CoreProvier { appState = AppState.idle; return; } + print("DEBUG : Homestate is NOT succes"); appState = AppState.failed; } Future searchAll({required int page}) async { this.page = page; if (page == 1) { + print("DEBUG : serach is busy"); results.clear(); appState = AppState.busy; } @@ -115,6 +118,7 @@ class HomeState extends CoreProvier { ); await service.httpGet(); if (service.isSuccess) { + print("DEBUG : HTTPget Home is succes"); lastPage = service.result['lastPage']; unreadCount = service.result['unread'] ?? unreadCount; results.addAll( @@ -128,6 +132,7 @@ class HomeState extends CoreProvier { appState = AppState.idle; return; } + print("DEBUG : Homestate is faild"); appState = AppState.failed; } diff --git a/lib/views/home/main/main_page.dart b/lib/views/home/main/main_page.dart index 720aa24..ae1b67e 100644 --- a/lib/views/home/main/main_page.dart +++ b/lib/views/home/main/main_page.dart @@ -33,30 +33,44 @@ class MainPage extends StatefulWidget { class _MainPageState extends State { @override void initState() { - context.read().init(); + super.initState(); + print("DEBUG: _MainPageState initstate called"); + WidgetsBinding.instance.addPostFrameCallback((_) { + print("DEBUG: addPostFrameCallback called"); + context.read().init(); + }); super.initState(); } @override Widget build(BuildContext context) { + print("DEBUG: _MainPageState build called"); return StateHandler( - onRetry: context.read().init, + onRetry: () => { + print("DEBUG: _MainPageState onRetry called"), + context.read().init + }, state: context.watch(), - builder: (context, state) => ListView( + builder: (context, state) { + print("DEBUG: FutureBuilder waiting"); + print("DEBUG: FutureBuilder state.stories.isNotEmpty: ${state.stories.isNotEmpty}"); + print("DEBUG: FutureBuilder state.content: ${state.content!.lists}"); + print("DEBUG: FutureBuilder state.content != null: ${state.content != null}"); + print("DEBUG: FutureBuilder state.content!.lists.isNotEmpty: ${state.content!.lists.isNotEmpty}"); + return ListView( padding: const EdgeInsets.symmetric(vertical: 16), children: [ if (state.stories.isNotEmpty) StorySection(stories: state.stories), const SizedBox(height: 12), const MainPageMainContent(), - Builder(builder: (context) { final List pageContent = []; if (state.content != null && state.content!.lists.isNotEmpty) { final lists = state.content!.lists; - + for (int i = 0; i < lists.length; i++) { final currentList = lists[i]; - + if (i == 4) { pageContent.add( Padding( @@ -107,21 +121,23 @@ class _MainPageState extends State { ), ); } - + pageContent.add(_MainPageSection( list: currentList, isLast: i == lists.length - 1, )); - + if (currentList.type == 'startup') { pageContent.add(_SwotSection(swotItems: state.swotItems)); } } } + print("DEBUG: FutureBuilder error"); return Column(children: pageContent); }), ], - ), + ); + }, ); } } @@ -135,7 +151,7 @@ class _SwotSection extends StatelessWidget { if (swotItems.isEmpty) { return const SizedBox.shrink(); } - + return Padding( padding: const EdgeInsets.all(0.0), child: Column( @@ -288,8 +304,7 @@ class _MainPageSection extends StatelessWidget { if (list.contents.isEmpty) { return const SizedBox(); } - - // This condition handles the "Soha" module, which should not display the Opportunity/Threat module. + if (list.type == 'delphi') { return Column( children: [ @@ -298,8 +313,7 @@ class _MainPageSection extends StatelessWidget { ], ); } - - // For all other modules, display as before. + return Column( children: [ _buildSectionHeader(context, icon), @@ -386,4 +400,4 @@ class _MainPageSection extends StatelessWidget { ), ); } -} \ No newline at end of file +} diff --git a/lib/views/home/main/main_page_state.dart b/lib/views/home/main/main_page_state.dart index 08aefbf..b8eb775 100644 --- a/lib/views/home/main/main_page_state.dart +++ b/lib/views/home/main/main_page_state.dart @@ -24,12 +24,19 @@ class MainPageState extends CoreProvier { List swotItems = []; Future _getMainPageContent() async { + print("DEBUG: _getMainPageContent started"); final service = RequestService(RequestHelper.mainPageContent); await service.httpGet(); if (service.isSuccess) { + print("DEBUG: _getMainPageContent success"); content = MainPageContent.fromJson(service.result); + print("DEBUG: _getMainPageContent service.result: ${service.result}"); unread = service.result['unread']; + print("DEBUG: __getMainPageContent unread: $unread, content: $content"); + notifyListeners(); } else { + print("DEBUG: _getMainPageContent failed state"); + notifyListeners(); throw Exception('Failed to load main page content'); } } @@ -43,14 +50,14 @@ class MainPageState extends CoreProvier { try { swotItems = await SwotService.fetchSwotItems(); } catch (e) { - + print(e); } } Future _fetchStories() async { try { stories = await StoryService.getStories(); - print("Fetched ${stories.length} stories."); + // print("Fetched ${stories.length} stories."); } catch (e) { stories = []; debugPrint("Could not fetch stories: $e"); @@ -58,6 +65,7 @@ class MainPageState extends CoreProvier { } void init() { + print("DEBUG: MainPageState init called"); Future.delayed(Duration.zero, () async { appState = AppState.busy; try { @@ -71,6 +79,7 @@ class MainPageState extends CoreProvier { appState = AppState.failed; } }); + _getMainPageContent(); } void markChangeHandler(String type, int id, bool value) { diff --git a/lib/views/splash/splash.dart b/lib/views/splash/splash.dart index 87ec3b4..fb62895 100644 --- a/lib/views/splash/splash.dart +++ b/lib/views/splash/splash.dart @@ -135,7 +135,7 @@ class _SplashState extends State { await ServerDataProvider.getData(); } - print("token route is $token"); + print("token route is $token, initalURI.path: ${initialURI?.path}, intitlPath: ${initialURI?.path}"); String extractedPath = initialURI?.path.toString() == '/' ? Routes.home : initialURI?.path.toString() ?? Routes.home; final String destinationRoute = token == null ? Routes.authenticaion : extractedPath; dynamic routeArguments = token == null ? {'isResetPassword': false} : {'showDialogs': true}; @@ -143,7 +143,7 @@ class _SplashState extends State { if (destinationRoute == Routes.home) { print("destination route was home and init uri is $initialURI"); - (routeArguments as Map)['deepLinkUri'] = initialURI; + // (routeArguments as Map)['deepLinkUri'] = initialURI; initialURI = null; } @@ -155,7 +155,7 @@ class _SplashState extends State { print("destination route: $destinationRoute, route args: $routeArguments"); await navigatorKey.currentState!.pushReplacementNamed( destinationRoute, - arguments: routeArguments, + arguments: token == null ? false : null, ); } catch (e) { setState(() {