diff --git a/lib/config/theme_data.dart b/lib/config/theme_data.dart index 7046d03..70fb3cc 100644 --- a/lib/config/theme_data.dart +++ b/lib/config/theme_data.dart @@ -183,7 +183,7 @@ extension DidvanColorScheme on ColorScheme { ? const Color(0XFFA3A3A3) : const Color(0XFF3D3D3D); Color get caption => brightness == Brightness.dark - ? const Color(0XFFD6D6D6) + ? const Color(0XFFBBBBBB) : const Color(0XFF666666); Color get hint => const Color(0XFFBBBBBB); Color get disabledText => brightness == Brightness.dark diff --git a/lib/models/view/app_bar_data.dart b/lib/models/view/app_bar_data.dart index ad8df2f..9e00aa5 100644 --- a/lib/models/view/app_bar_data.dart +++ b/lib/models/view/app_bar_data.dart @@ -1,7 +1,10 @@ +import 'package:flutter/material.dart'; + class AppBarData { final String? title; final String? subtitle; final bool hasBack; + final Widget? trailing; - AppBarData({this.title, this.subtitle, this.hasBack = false}); + AppBarData({this.title, this.subtitle, this.hasBack = false, this.trailing}); } diff --git a/lib/pages/home/profile/chat_list/chat_list.dart b/lib/pages/home/profile/chat_list/chat_list.dart new file mode 100644 index 0000000..9afec6d --- /dev/null +++ b/lib/pages/home/profile/chat_list/chat_list.dart @@ -0,0 +1,76 @@ +import 'package:didvan/config/theme_data.dart'; +import 'package:didvan/constants/app_icons.dart'; +import 'package:didvan/models/view/app_bar_data.dart'; +import 'package:didvan/widgets/didvan/badge.dart'; +import 'package:didvan/widgets/didvan/divider.dart'; +import 'package:didvan/widgets/didvan/scaffold.dart'; +import 'package:didvan/widgets/didvan/text.dart'; +import 'package:flutter/material.dart'; + +class ChatList extends StatelessWidget { + const ChatList({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return DidvanScaffold( + appBarData: AppBarData( + hasBack: true, + title: 'پیام‌ها', + trailing: const DidvanBadge( + text: '12', + ), + ), + slivers: [ + for (var i = 0; i < 10; i++) + Column( + children: [ + Row( + children: [ + const Icon( + DidvanIcons.avatar_light, + size: 32, + ), + const SizedBox(width: 12), + Expanded( + child: DidvanText( + 'سردبیر رادار سیاسی', + style: Theme.of(context).textTheme.bodyText1, + ), + ), + const DidvanBadge(text: '2'), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(width: 40), + const Icon( + DidvanIcons.check_double_light, + size: 16, + ), + const SizedBox(width: 4), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const DidvanText( + 'فورت فورت،تموم شد؟ خیلی تاثیرگذار بود.', + maxLines: 1, + ), + DidvanText( + '15 دقیقه پیش', + style: Theme.of(context).textTheme.caption, + color: Theme.of(context).colorScheme.caption, + ) + ], + ), + ), + ], + ), + const DidvanDivider(), + ], + ) + ], + ); + } +} diff --git a/lib/pages/home/profile/chat_list/chat_list_state.dart b/lib/pages/home/profile/chat_list/chat_list_state.dart new file mode 100644 index 0000000..a11ecee --- /dev/null +++ b/lib/pages/home/profile/chat_list/chat_list_state.dart @@ -0,0 +1,3 @@ +import 'package:didvan/providers/core_provider.dart'; + +class ChatListState extends CoreProvier {} diff --git a/lib/pages/home/profile/profile.dart b/lib/pages/home/profile/profile.dart index 805099b..212ba77 100644 --- a/lib/pages/home/profile/profile.dart +++ b/lib/pages/home/profile/profile.dart @@ -33,7 +33,7 @@ class Profile extends StatelessWidget { MenuItem( title: 'پیام‌ها', icon: DidvanIcons.message_regular, - onTap: () => {}, + onTap: () => Navigator.of(context).pushNamed(Routes.chatList), ), const DidvanDivider(), MenuItem( diff --git a/lib/routes/route_generator.dart b/lib/routes/route_generator.dart index 6927ee1..ca92ad5 100644 --- a/lib/routes/route_generator.dart +++ b/lib/routes/route_generator.dart @@ -4,6 +4,8 @@ import 'package:didvan/pages/home/home.dart'; import 'package:didvan/pages/home/home_state.dart'; import 'package:didvan/pages/home/news/news_details/news_details.dart'; import 'package:didvan/pages/home/news/news_details/news_details_state.dart'; +import 'package:didvan/pages/home/profile/chat_list/chat_list.dart'; +import 'package:didvan/pages/home/profile/chat_list/chat_list_state.dart'; import 'package:didvan/pages/home/profile/edit_profile/edit_profile.dart'; import 'package:didvan/pages/home/profile/settings/settings.dart'; import 'package:didvan/pages/home/profile/settings/settings_state.dart'; @@ -64,6 +66,14 @@ class RouteGenerator { child: const NewsDetails(), ), ); + case Routes.chatList: + return _createRoute( + ChangeNotifierProvider( + create: (context) => ChatListState(), + child: const ChatList(), + ), + ); + default: return _errorRoute(); } diff --git a/lib/routes/routes.dart b/lib/routes/routes.dart index 59254bc..8089c54 100644 --- a/lib/routes/routes.dart +++ b/lib/routes/routes.dart @@ -7,4 +7,5 @@ class Routes { static const String settings = '/settings'; static const String radarDetails = '/radar-details'; static const String newsDetails = '/news-details'; + static const String chatList = '/chat-list'; } diff --git a/lib/widgets/didvan/app_bar.dart b/lib/widgets/didvan/app_bar.dart index d9d244c..3daaf44 100644 --- a/lib/widgets/didvan/app_bar.dart +++ b/lib/widgets/didvan/app_bar.dart @@ -20,23 +20,29 @@ class DidvanAppBar extends StatelessWidget { icon: const Icon(Icons.arrow_back), ), const SizedBox(width: 16), - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - if (appBarData.title != null) - DidvanText( - appBarData.title!, - style: Theme.of(context).textTheme.headline3, - color: Theme.of(context).colorScheme.title, - ), - if (appBarData.subtitle != null) - DidvanText( - appBarData.title!, - style: Theme.of(context).textTheme.overline, - color: Theme.of(context).colorScheme.caption, - ), - ], + Expanded( + child: Align( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (appBarData.title != null) + DidvanText( + appBarData.title!, + style: Theme.of(context).textTheme.headline3, + color: Theme.of(context).colorScheme.title, + ), + if (appBarData.subtitle != null) + DidvanText( + appBarData.title!, + style: Theme.of(context).textTheme.overline, + color: Theme.of(context).colorScheme.caption, + ), + ], + ), + ), ), + if (appBarData.trailing != null) appBarData.trailing!, ], ), ); diff --git a/lib/widgets/didvan/badge.dart b/lib/widgets/didvan/badge.dart new file mode 100644 index 0000000..6446337 --- /dev/null +++ b/lib/widgets/didvan/badge.dart @@ -0,0 +1,31 @@ +import 'package:didvan/widgets/didvan/text.dart'; +import 'package:flutter/material.dart'; + +class DidvanBadge extends StatelessWidget { + final String text; + const DidvanBadge({ + Key? key, + required this.text, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + height: 24, + width: 24, + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.secondary, + shape: BoxShape.circle, + ), + alignment: Alignment.center, + child: FittedBox( + fit: BoxFit.scaleDown, + child: DidvanText( + text, + isEnglishFont: true, + style: Theme.of(context).textTheme.overline, + ), + ), + ); + } +} diff --git a/lib/widgets/didvan/text.dart b/lib/widgets/didvan/text.dart index 777d8be..286b1b7 100644 --- a/lib/widgets/didvan/text.dart +++ b/lib/widgets/didvan/text.dart @@ -8,6 +8,7 @@ class DidvanText extends StatelessWidget { final double? fontSize; final TextAlign textAlign; final int? maxLines; + final bool isEnglishFont; const DidvanText( this.text, { @@ -18,17 +19,18 @@ class DidvanText extends StatelessWidget { this.fontWeight, this.textAlign = TextAlign.right, this.maxLines, + this.isEnglishFont = false, }) : super(key: key); @override Widget build(BuildContext context) { return Text( text, - style: (style ?? Theme.of(context).textTheme.bodyText2)!.copyWith( + style: ((style ?? Theme.of(context).textTheme.bodyText2)!.copyWith( color: color, fontWeight: fontWeight, fontSize: fontSize, - ), + )).copyWith(fontFamily: isEnglishFont ? 'Dana' : null), textAlign: textAlign, maxLines: maxLines, );