This commit is contained in:
MohammadTaha Basiri 2022-06-10 11:38:15 +04:30
parent 22c6a0c771
commit a7bbcd4eaa
11 changed files with 109 additions and 15 deletions

View File

@ -4,12 +4,23 @@ import 'package:didvan/providers/media.dart';
import 'package:didvan/providers/theme.dart'; import 'package:didvan/providers/theme.dart';
import 'package:didvan/providers/user.dart'; import 'package:didvan/providers/user.dart';
import 'package:didvan/routes/route_generator.dart'; import 'package:didvan/routes/route_generator.dart';
import 'package:didvan/services/app_initalizer.dart';
import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
void main() { void main() async {
await Firebase.initializeApp();
final initMsg = await FirebaseMessaging.instance.getInitialMessage();
if (initMsg != null) {
AppInitializer.clickAction = initMsg.data['click_action'].replaceAll(
'navigate-',
'',
);
}
runApp(const Didvan()); runApp(const Didvan());
} }

View File

@ -12,6 +12,14 @@ import 'package:didvan/utils/action_sheet.dart';
class UserProvider extends CoreProvier { class UserProvider extends CoreProvier {
late User user; late User user;
bool isAuthenticated = false; bool isAuthenticated = false;
int _unreadMessageCount = 0;
set unreadMessageCount(int value) {
_unreadMessageCount = value;
notifyListeners();
}
int get unreadMessageCount => _unreadMessageCount;
static final List<MapEntry> _radarMarkQueue = []; static final List<MapEntry> _radarMarkQueue = [];
static final List<MapEntry> _newsMarkQueue = []; static final List<MapEntry> _newsMarkQueue = [];
@ -211,4 +219,12 @@ class UserProvider extends CoreProvier {
_statisticMarkQueue.removeWhere((element) => element.key == id); _statisticMarkQueue.removeWhere((element) => element.key == id);
}); });
} }
Future<void> getUnreadMessageCount() async {
final RequestService service = RequestService(RequestHelper.directs);
await service.httpGet();
if (service.isSuccess) {
_unreadMessageCount = service.result['unread'] ?? 0;
}
}
} }

View File

@ -8,6 +8,7 @@ import 'package:path_provider/path_provider.dart';
class AppInitializer { class AppInitializer {
static String? fcmToken; static String? fcmToken;
static String? clickAction;
static Future<void> setupServices() async { static Future<void> setupServices() async {
if (!kIsWeb) { if (!kIsWeb) {

View File

@ -1,10 +1,15 @@
import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/design_config.dart';
import 'package:didvan/models/requests/news.dart';
import 'package:didvan/models/requests/radar.dart';
import 'package:didvan/models/requests/studio.dart';
import 'package:didvan/services/app_initalizer.dart';
import 'package:didvan/views/home/home_state.dart'; import 'package:didvan/views/home/home_state.dart';
import 'package:didvan/views/home/news/news.dart'; import 'package:didvan/views/home/news/news.dart';
import 'package:didvan/views/home/radar/radar.dart'; import 'package:didvan/views/home/radar/radar.dart';
import 'package:didvan/views/home/settings/settings.dart'; import 'package:didvan/views/home/settings/settings.dart';
import 'package:didvan/views/home/statistic/statistic.dart'; import 'package:didvan/views/home/statistic/statistic.dart';
import 'package:didvan/views/home/studio/studio.dart'; import 'package:didvan/views/home/studio/studio.dart';
import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart';
import 'package:didvan/views/widgets/didvan/bnb.dart'; import 'package:didvan/views/widgets/didvan/bnb.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -26,6 +31,25 @@ class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
_tabController.addListener(() { _tabController.addListener(() {
context.read<HomeState>().currentPageIndex = _tabController.index; context.read<HomeState>().currentPageIndex = _tabController.index;
}); });
// if (AppInitializer.clickAction != null) {
// final clickAction = AppInitializer.clickAction!;
// String routeName = '';
// if (clickAction.contains('podcast')) {
// context.read<StudioDetailsState>().getStudioDetails();
// return;
// }
// Navigator.of(context).pushNamed(
// clickAction.split('-').first,
// arguments: {
// 'id': clickAction.split('-')[1],
// 'args': clickAction.contains('radar')
// ? const RadarRequestArgs(page: 0)
// : clickAction.contains('news')
// ? const NewsRequestArgs(page: 0)
// : const StudioRequestArgs(page: 0),
// },
// );
// }
super.initState(); super.initState();
} }

View File

@ -1,6 +1,7 @@
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/models/chat_room/chat_room.dart'; import 'package:didvan/models/chat_room/chat_room.dart';
import 'package:didvan/providers/user.dart';
import 'package:didvan/routes/routes.dart'; import 'package:didvan/routes/routes.dart';
import 'package:didvan/utils/date_time.dart'; import 'package:didvan/utils/date_time.dart';
import 'package:didvan/views/home/settings/direct_list/direct_list_state.dart'; import 'package:didvan/views/home/settings/direct_list/direct_list_state.dart';
@ -26,6 +27,7 @@ class ChatRoomItem extends StatelessWidget {
int unreadCount = chatRoom.unread; int unreadCount = chatRoom.unread;
chatRoom.unread = 0; chatRoom.unread = 0;
state.unreadCount -= unreadCount; state.unreadCount -= unreadCount;
context.read<UserProvider>().unreadMessageCount -= unreadCount;
}, },
child: Container( child: Container(
color: Colors.transparent, color: Colors.transparent,

View File

@ -1,3 +1,4 @@
import 'package:didvan/config/theme_data.dart';
import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/providers/theme.dart'; import 'package:didvan/providers/theme.dart';
import 'package:didvan/providers/user.dart'; import 'package:didvan/providers/user.dart';
@ -5,6 +6,7 @@ import 'package:didvan/routes/routes.dart';
import 'package:didvan/services/storage/storage.dart'; import 'package:didvan/services/storage/storage.dart';
import 'package:didvan/views/home/widgets/logo_app_bar.dart'; import 'package:didvan/views/home/widgets/logo_app_bar.dart';
import 'package:didvan/views/home/widgets/menu_item.dart'; import 'package:didvan/views/home/widgets/menu_item.dart';
import 'package:didvan/views/widgets/didvan/badge.dart';
import 'package:didvan/views/widgets/didvan/card.dart'; import 'package:didvan/views/widgets/didvan/card.dart';
import 'package:didvan/views/widgets/didvan/divider.dart'; import 'package:didvan/views/widgets/didvan/divider.dart';
import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/didvan/text.dart';
@ -33,11 +35,27 @@ class Settings extends StatelessWidget {
DidvanCard( DidvanCard(
child: Column( child: Column(
children: [ children: [
MenuOption( Consumer<UserProvider>(
title: 'پیام‌ها', child: Icon(
icon: DidvanIcons.message_regular, DidvanIcons.angle_left_regular,
onTap: () => size: 18,
Navigator.of(context).pushNamed(Routes.directList), color: Theme.of(context).colorScheme.title,
),
builder: (context, state, child) => MenuOption(
title: 'پیام‌ها',
icon: DidvanIcons.message_regular,
onTap: () =>
Navigator.of(context).pushNamed(Routes.directList),
trailing: Row(
children: [
if (state.unreadMessageCount != 0)
DidvanBadge(
text: state.unreadMessageCount.toString(),
),
child!,
],
),
),
), ),
const DidvanDivider(), const DidvanDivider(),
MenuOption( MenuOption(

View File

@ -153,7 +153,7 @@ class StatisticDetailsState extends CoreProvier {
double.parse(value.replaceAll(',', '')); double.parse(value.replaceAll(',', ''));
Future<void> getRelatedContents() async { Future<void> getRelatedContents() async {
if (relatedContents!.isNotEmpty) return; if (relatedContents?.isNotEmpty ?? true) return;
final service = RequestService(RequestHelper.tag( final service = RequestService(RequestHelper.tag(
ids: tags.map((tag) => tag.id).toList(), ids: tags.map((tag) => tag.id).toList(),
)); ));

View File

@ -115,6 +115,7 @@ class _SplashState extends State<Splash> {
} }
RequestService.token = token; RequestService.token = token;
final result = await userProvider.getUserInfo(); final result = await userProvider.getUserInfo();
await userProvider.getUnreadMessageCount();
if (!result) { if (!result) {
StorageService.delete(key: 'token'); StorageService.delete(key: 'token');
Navigator.of(context).pushNamedAndRemoveUntil( Navigator.of(context).pushNamedAndRemoveUntil(

View File

@ -3,6 +3,7 @@ import 'package:didvan/config/design_config.dart';
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/models/enums.dart'; import 'package:didvan/models/enums.dart';
import 'package:didvan/providers/user.dart';
import 'package:didvan/services/media/media.dart'; import 'package:didvan/services/media/media.dart';
import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/utils/action_sheet.dart';
import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart';
@ -82,6 +83,8 @@ class DidvanBNB extends StatelessWidget {
onTap: () => onTabChanged(3), onTap: () => onTabChanged(3),
), ),
_NavBarItem( _NavBarItem(
hasBadge:
context.watch<UserProvider>().unreadMessageCount != 0,
isSelected: currentTabIndex == 4, isSelected: currentTabIndex == 4,
title: 'تنظیمات', title: 'تنظیمات',
selectedIcon: DidvanIcons.setting_solid, selectedIcon: DidvanIcons.setting_solid,
@ -360,6 +363,7 @@ class _NavBarItem extends StatelessWidget {
final String title; final String title;
final IconData selectedIcon; final IconData selectedIcon;
final IconData unselectedIcon; final IconData unselectedIcon;
final bool hasBadge;
const _NavBarItem({ const _NavBarItem({
Key? key, Key? key,
required this.isSelected, required this.isSelected,
@ -367,6 +371,7 @@ class _NavBarItem extends StatelessWidget {
required this.selectedIcon, required this.selectedIcon,
required this.unselectedIcon, required this.unselectedIcon,
required this.onTap, required this.onTap,
this.hasBadge = false,
}) : super(key: key); }) : super(key: key);
@override @override
@ -397,12 +402,25 @@ class _NavBarItem extends StatelessWidget {
? Theme.of(context).colorScheme.focused ? Theme.of(context).colorScheme.focused
: Theme.of(context).colorScheme.surface, : Theme.of(context).colorScheme.surface,
), ),
child: Icon( child: Stack(
isSelected ? selectedIcon : unselectedIcon, children: [
size: 32, Icon(
color: DesignConfig.isDark isSelected ? selectedIcon : unselectedIcon,
? Theme.of(context).colorScheme.text size: 32,
: Theme.of(context).colorScheme.title, color: DesignConfig.isDark
? Theme.of(context).colorScheme.text
: Theme.of(context).colorScheme.title,
),
if (hasBadge)
Container(
height: 12,
width: 12,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Theme.of(context).colorScheme.secondary,
),
),
],
), ),
), ),
DidvanText( DidvanText(

View File

@ -279,6 +279,9 @@ class _DidvanPageViewState extends State<DidvanPageView> {
margin: EdgeInsets.zero, margin: EdgeInsets.zero,
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
), ),
'a': Style(
textAlign: TextAlign.left,
),
}, },
); );
} }

View File

@ -795,7 +795,7 @@ packages:
name: url_launcher name: url_launcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.1.2" version: "6.1.3"
url_launcher_android: url_launcher_android:
dependency: transitive dependency: transitive
description: description:
@ -914,7 +914,7 @@ packages:
name: webview_flutter_android name: webview_flutter_android
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.8.10" version: "2.8.11"
webview_flutter_platform_interface: webview_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description: