v2.1.1
This commit is contained in:
parent
22c6a0c771
commit
a7bbcd4eaa
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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>(
|
||||||
|
child: Icon(
|
||||||
|
DidvanIcons.angle_left_regular,
|
||||||
|
size: 18,
|
||||||
|
color: Theme.of(context).colorScheme.title,
|
||||||
|
),
|
||||||
|
builder: (context, state, child) => MenuOption(
|
||||||
title: 'پیامها',
|
title: 'پیامها',
|
||||||
icon: DidvanIcons.message_regular,
|
icon: DidvanIcons.message_regular,
|
||||||
onTap: () =>
|
onTap: () =>
|
||||||
Navigator.of(context).pushNamed(Routes.directList),
|
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(
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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,13 +402,26 @@ 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(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
isSelected ? selectedIcon : unselectedIcon,
|
isSelected ? selectedIcon : unselectedIcon,
|
||||||
size: 32,
|
size: 32,
|
||||||
color: DesignConfig.isDark
|
color: DesignConfig.isDark
|
||||||
? Theme.of(context).colorScheme.text
|
? Theme.of(context).colorScheme.text
|
||||||
: Theme.of(context).colorScheme.title,
|
: 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(
|
||||||
title,
|
title,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue