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/user.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:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.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());
}

View File

@ -12,6 +12,14 @@ import 'package:didvan/utils/action_sheet.dart';
class UserProvider extends CoreProvier {
late User user;
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> _newsMarkQueue = [];
@ -211,4 +219,12 @@ class UserProvider extends CoreProvier {
_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 {
static String? fcmToken;
static String? clickAction;
static Future<void> setupServices() async {
if (!kIsWeb) {

View File

@ -1,10 +1,15 @@
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/news/news.dart';
import 'package:didvan/views/home/radar/radar.dart';
import 'package:didvan/views/home/settings/settings.dart';
import 'package:didvan/views/home/statistic/statistic.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:flutter/material.dart';
import 'package:provider/provider.dart';
@ -26,6 +31,25 @@ class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
_tabController.addListener(() {
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();
}

View File

@ -1,6 +1,7 @@
import 'package:didvan/config/theme_data.dart';
import 'package:didvan/constants/app_icons.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/utils/date_time.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;
chatRoom.unread = 0;
state.unreadCount -= unreadCount;
context.read<UserProvider>().unreadMessageCount -= unreadCount;
},
child: Container(
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/providers/theme.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/views/home/widgets/logo_app_bar.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/divider.dart';
import 'package:didvan/views/widgets/didvan/text.dart';
@ -33,11 +35,27 @@ class Settings extends StatelessWidget {
DidvanCard(
child: Column(
children: [
MenuOption(
title: 'پیام‌ها',
icon: DidvanIcons.message_regular,
onTap: () =>
Navigator.of(context).pushNamed(Routes.directList),
Consumer<UserProvider>(
child: Icon(
DidvanIcons.angle_left_regular,
size: 18,
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(),
MenuOption(

View File

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

View File

@ -115,6 +115,7 @@ class _SplashState extends State<Splash> {
}
RequestService.token = token;
final result = await userProvider.getUserInfo();
await userProvider.getUnreadMessageCount();
if (!result) {
StorageService.delete(key: 'token');
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/constants/app_icons.dart';
import 'package:didvan/models/enums.dart';
import 'package:didvan/providers/user.dart';
import 'package:didvan/services/media/media.dart';
import 'package:didvan/utils/action_sheet.dart';
import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart';
@ -82,6 +83,8 @@ class DidvanBNB extends StatelessWidget {
onTap: () => onTabChanged(3),
),
_NavBarItem(
hasBadge:
context.watch<UserProvider>().unreadMessageCount != 0,
isSelected: currentTabIndex == 4,
title: 'تنظیمات',
selectedIcon: DidvanIcons.setting_solid,
@ -360,6 +363,7 @@ class _NavBarItem extends StatelessWidget {
final String title;
final IconData selectedIcon;
final IconData unselectedIcon;
final bool hasBadge;
const _NavBarItem({
Key? key,
required this.isSelected,
@ -367,6 +371,7 @@ class _NavBarItem extends StatelessWidget {
required this.selectedIcon,
required this.unselectedIcon,
required this.onTap,
this.hasBadge = false,
}) : super(key: key);
@override
@ -397,12 +402,25 @@ class _NavBarItem extends StatelessWidget {
? Theme.of(context).colorScheme.focused
: Theme.of(context).colorScheme.surface,
),
child: Icon(
isSelected ? selectedIcon : unselectedIcon,
size: 32,
color: DesignConfig.isDark
? Theme.of(context).colorScheme.text
: Theme.of(context).colorScheme.title,
child: Stack(
children: [
Icon(
isSelected ? selectedIcon : unselectedIcon,
size: 32,
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(

View File

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

View File

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