dark theme configuration
This commit is contained in:
parent
ec321d2e7b
commit
c199785b98
|
|
@ -1,86 +1,9 @@
|
|||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class DesignConfig {
|
||||
static const backgroundColor = Color(0XFFF8F8FA);
|
||||
static const Color surfaceColor = Colors.white;
|
||||
|
||||
static const Color lightPrimaryColor2 = Color(0XFFE6F3FA);
|
||||
static const Color lightPrimaryColor3 = Color(0XFFF5FAFC);
|
||||
static const Color primaryColor = Color(0XFF007EA7);
|
||||
static const Color darkPrimaryColor2 = Color(0XFF1B3C59);
|
||||
|
||||
static const Color secontCtaColor = Color(0XFFF5F5F5);
|
||||
static const Color cardBorderColor = Color(0XFFEBEBEB);
|
||||
static const Color borderColor = Color(0XFFE0E0E0);
|
||||
static const Color hintColor = Color(0XFFBBBBBB);
|
||||
static const Color captionColor = Color(0XFF666666);
|
||||
|
||||
static const Color lightRedColor = Color(0XFFFFF8F8);
|
||||
|
||||
static final ThemeData lightTheme = ThemeData(
|
||||
primaryColor: primaryColor,
|
||||
colorScheme: lightColorScheme,
|
||||
fontFamily: 'Dana-FA',
|
||||
appBarTheme: const AppBarTheme(
|
||||
backgroundColor: backgroundColor,
|
||||
foregroundColor: darkPrimaryColor2,
|
||||
),
|
||||
textTheme: const TextTheme(
|
||||
bodyText1: body1Text,
|
||||
bodyText2: body2Text,
|
||||
caption: captionText,
|
||||
subtitle2: subtitle2Text,
|
||||
subtitle1: subtitle1Text,
|
||||
headline3: headline3Text,
|
||||
),
|
||||
scaffoldBackgroundColor: backgroundColor,
|
||||
);
|
||||
|
||||
static final ThemeData darkTheme = ThemeData();
|
||||
|
||||
static const ColorScheme lightColorScheme = ColorScheme(
|
||||
primary: primaryColor,
|
||||
primaryVariant: Color(0XFF1B3C59),
|
||||
secondary: Color(0XFFD61515),
|
||||
secondaryVariant: Color(0XFFA30001),
|
||||
surface: surfaceColor,
|
||||
background: backgroundColor,
|
||||
error: Color(0XFFF00505),
|
||||
onPrimary: Colors.white,
|
||||
onSecondary: Colors.white,
|
||||
onSurface: Color(0XFF1F1F1F),
|
||||
onBackground: Color(0XFF1F1F1F),
|
||||
onError: Colors.white,
|
||||
brightness: Brightness.light,
|
||||
);
|
||||
|
||||
static const ColorScheme currentColorScheme = lightColorScheme;
|
||||
|
||||
static const TextStyle headline3Text = TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600,
|
||||
);
|
||||
static const TextStyle subtitle1Text = TextStyle(
|
||||
fontSize: 17,
|
||||
fontWeight: FontWeight.w700,
|
||||
);
|
||||
static const TextStyle subtitle2Text = TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700,
|
||||
);
|
||||
static const TextStyle body1Text = TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700,
|
||||
);
|
||||
static const TextStyle body2Text = TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w400,
|
||||
);
|
||||
static const TextStyle captionText = TextStyle(
|
||||
fontSize: 13,
|
||||
color: captionColor,
|
||||
);
|
||||
static late BuildContext context;
|
||||
|
||||
static const BorderRadius lowBorderRadius = BorderRadius.all(
|
||||
Radius.circular(8),
|
||||
|
|
@ -91,15 +14,15 @@ class DesignConfig {
|
|||
static const BorderRadius highBorderRadius = BorderRadius.all(
|
||||
Radius.circular(16),
|
||||
);
|
||||
static final Border lightBorder = Border.all(color: DesignConfig.borderColor);
|
||||
static final BoxDecoration actionCardDecoration = BoxDecoration(
|
||||
color: lightPrimaryColor3,
|
||||
boxShadow: defaultShadow,
|
||||
borderRadius: mediumBorderRadius,
|
||||
|
||||
static final Border cardBorder = Border.all(
|
||||
color: Theme.of(context).colorScheme.cardBorder,
|
||||
width: 0.25,
|
||||
);
|
||||
static final List<BoxShadow> defaultShadow = [
|
||||
|
||||
static List<BoxShadow> get defaultShadow => [
|
||||
BoxShadow(
|
||||
color: currentColorScheme.primaryVariant.withOpacity(0.25),
|
||||
color: const Color(0XFF1B3C59).withOpacity(0.25),
|
||||
blurRadius: 16,
|
||||
spreadRadius: 0,
|
||||
)
|
||||
|
|
@ -108,12 +31,22 @@ class DesignConfig {
|
|||
static const Duration lowAnimationDuration = Duration(milliseconds: 300);
|
||||
static const Duration mediumAnimationDuration = Duration(milliseconds: 600);
|
||||
|
||||
static final SystemUiOverlayStyle systemUIOverlayStyle = SystemUiOverlayStyle(
|
||||
statusBarBrightness: Brightness.dark,
|
||||
statusBarIconBrightness: Brightness.dark,
|
||||
static SystemUiOverlayStyle get systemUiOverlayStyle {
|
||||
return SystemUiOverlayStyle(
|
||||
statusBarIconBrightness: Theme.of(context).brightness == Brightness.dark
|
||||
? Brightness.light
|
||||
: Brightness.dark,
|
||||
statusBarColor: Colors.transparent,
|
||||
systemNavigationBarColor: currentColorScheme.surface,
|
||||
systemNavigationBarColor: Theme.of(context).colorScheme.surface,
|
||||
systemNavigationBarDividerColor: Colors.transparent,
|
||||
systemNavigationBarIconBrightness: Brightness.dark,
|
||||
systemNavigationBarIconBrightness:
|
||||
Theme.of(context).colorScheme.brightness == Brightness.dark
|
||||
? Brightness.light
|
||||
: Brightness.dark,
|
||||
);
|
||||
}
|
||||
|
||||
static void updateSystemUiOverlayStyle() {
|
||||
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,213 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
class LightThemeConfig {
|
||||
static const Color _primary = Color(0XFF007EA7);
|
||||
static const Color _white = Color(0XFFFFFFFF);
|
||||
static const Color _black = Color(0XFF292929);
|
||||
static const Color _background = Color(0XFFF8F8FA);
|
||||
|
||||
static final ThemeData themeData = ThemeData(
|
||||
backgroundColor: _background,
|
||||
scaffoldBackgroundColor: _background,
|
||||
colorScheme: _colorScheme,
|
||||
fontFamily: 'Dana-FA',
|
||||
textTheme: _textTheme,
|
||||
);
|
||||
|
||||
static final TextTheme _textTheme = const TextTheme(
|
||||
bodyText1: _body1Text,
|
||||
bodyText2: _body2Text,
|
||||
caption: _captionText,
|
||||
subtitle2: _subtitle2Text,
|
||||
subtitle1: _subtitle1Text,
|
||||
headline3: _headline3Text,
|
||||
).apply(bodyColor: _black, displayColor: _black);
|
||||
|
||||
static const ColorScheme _colorScheme = ColorScheme(
|
||||
primary: _primary,
|
||||
primaryVariant: _white,
|
||||
secondary: Color(0XFFD61515),
|
||||
secondaryVariant: _white,
|
||||
surface: _white,
|
||||
background: _background,
|
||||
error: Color(0XFFF00505),
|
||||
onPrimary: _white,
|
||||
onSecondary: _white,
|
||||
onSurface: _black,
|
||||
onBackground: _white,
|
||||
onError: _white,
|
||||
brightness: Brightness.light,
|
||||
);
|
||||
|
||||
static const TextStyle _headline3Text = TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600,
|
||||
);
|
||||
static const TextStyle _subtitle1Text = TextStyle(
|
||||
fontSize: 17,
|
||||
fontWeight: FontWeight.w700,
|
||||
);
|
||||
static const TextStyle _subtitle2Text = TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700,
|
||||
);
|
||||
static const TextStyle _body1Text = TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700,
|
||||
);
|
||||
static const TextStyle _body2Text = TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w400,
|
||||
);
|
||||
static const TextStyle _captionText = TextStyle(
|
||||
fontSize: 13,
|
||||
fontWeight: FontWeight.w400,
|
||||
);
|
||||
}
|
||||
|
||||
class DarkThemeConfig {
|
||||
static const Color _primary = Color(0XFF007EA7);
|
||||
static const Color _white = Color(0XFFFFFFFF);
|
||||
static const Color _background = Color(0XFF202224);
|
||||
|
||||
static final ThemeData themeData = ThemeData(
|
||||
backgroundColor: _background,
|
||||
scaffoldBackgroundColor: _background,
|
||||
colorScheme: _colorScheme,
|
||||
fontFamily: 'Dana-FA',
|
||||
textTheme: _textTheme,
|
||||
iconTheme: const IconThemeData(
|
||||
color: text,
|
||||
),
|
||||
);
|
||||
|
||||
static final TextTheme _textTheme = const TextTheme(
|
||||
bodyText1: _body1Text,
|
||||
bodyText2: _body2Text,
|
||||
caption: _captionText,
|
||||
subtitle2: _subtitle2Text,
|
||||
subtitle1: _subtitle1Text,
|
||||
headline3: _headline3Text,
|
||||
).apply(bodyColor: text, displayColor: text);
|
||||
|
||||
static const ColorScheme _colorScheme = ColorScheme(
|
||||
primary: _primary,
|
||||
primaryVariant: _white,
|
||||
secondary: Color(0XFFE53939),
|
||||
secondaryVariant: _white,
|
||||
surface: Color(0XFF181B1F),
|
||||
background: _background,
|
||||
error: Color(0XFFF53B3B),
|
||||
onPrimary: _white,
|
||||
onSecondary: _white,
|
||||
onSurface: text,
|
||||
onBackground: text,
|
||||
onError: _white,
|
||||
brightness: Brightness.dark,
|
||||
);
|
||||
|
||||
static const TextStyle _headline3Text = TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600,
|
||||
);
|
||||
static const TextStyle _subtitle1Text = TextStyle(
|
||||
fontSize: 17,
|
||||
fontWeight: FontWeight.w700,
|
||||
);
|
||||
static const TextStyle _subtitle2Text = TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700,
|
||||
);
|
||||
static const TextStyle _body1Text = TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700,
|
||||
);
|
||||
static const TextStyle _body2Text = TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w400,
|
||||
);
|
||||
static const TextStyle _captionText = TextStyle(
|
||||
fontSize: 13,
|
||||
fontWeight: FontWeight.w400,
|
||||
);
|
||||
|
||||
// Secondary colors
|
||||
static const Color secondaryColor = Color(0XFFD61515);
|
||||
static const Color secondaryDark = Color(0XFF703838);
|
||||
|
||||
// Grey colors
|
||||
static const Color white = Color(0XFFFFFFFF);
|
||||
static const Color title = Color(0XFFF5F5F5);
|
||||
static const Color text = Color(0XFFD6D6D6);
|
||||
static const Color hint = Color(0XFFBBBBBB);
|
||||
static const Color border = Color(0XFF666666);
|
||||
|
||||
// Error and success
|
||||
static const Color errorLight = Color(0XFFF0C9CD);
|
||||
static const Color error = Color(0XFFF53B3B);
|
||||
static const Color successLight = Color(0XFFBBD6B4);
|
||||
static const Color success = Color(0XFF32A64C);
|
||||
}
|
||||
|
||||
extension DidvanColorScheme on ColorScheme {
|
||||
// Secondary colors
|
||||
Color get secondaryDisabled => brightness == Brightness.dark
|
||||
? const Color(0XFF703838)
|
||||
: const Color(0XFFFFC8C8);
|
||||
|
||||
Color get white => const Color(0XFFFFFFFF);
|
||||
Color get focused => brightness == Brightness.dark
|
||||
? const Color(0XFF323C47)
|
||||
: const Color(0XFFE6F3FA);
|
||||
Color get navigation => brightness == Brightness.dark
|
||||
? const Color(0XFF181B1F)
|
||||
: const Color(0XFF012348);
|
||||
Color get focusedBorder => brightness == Brightness.dark
|
||||
? const Color(0XFFC8E0F4)
|
||||
: const Color(0XFFE6F3FA);
|
||||
Color get title => brightness == Brightness.dark
|
||||
? const Color(0XFFA3A3A3)
|
||||
: const Color(0XFF1B3C59);
|
||||
Color get text => brightness == Brightness.dark
|
||||
? const Color(0XFFA3A3A3)
|
||||
: const Color(0XFF292929);
|
||||
Color get inputText => brightness == Brightness.dark
|
||||
? const Color(0XFFA3A3A3)
|
||||
: const Color(0XFF3D3D3D);
|
||||
Color get caption => brightness == Brightness.dark
|
||||
? const Color(0XFFD6D6D6)
|
||||
: const Color(0XFF666666);
|
||||
Color get hint => const Color(0XFFBBBBBB);
|
||||
Color get disabledText => brightness == Brightness.dark
|
||||
? const Color(0XFF666666)
|
||||
: const Color(0XFFE0E0E0);
|
||||
Color get border => brightness == Brightness.dark
|
||||
? const Color(0XFF666666)
|
||||
: const Color(0XFFE0E0E0);
|
||||
Color get cardBorder => brightness == Brightness.dark
|
||||
? const Color(0XFF666666)
|
||||
: const Color(0XFFEBEBEB);
|
||||
Color get disabledBackground => brightness == Brightness.dark
|
||||
? const Color(0XFF1F1F1F)
|
||||
: const Color(0XFFE0E0E0);
|
||||
Color get secondCTA => brightness == Brightness.dark
|
||||
? const Color(0XFF474747)
|
||||
: const Color(0XFFF5F5F5);
|
||||
Color get splash => brightness == Brightness.dark
|
||||
? const Color(0XFF333333)
|
||||
: const Color(0XFFC8E0F4);
|
||||
Color get black => brightness == Brightness.dark
|
||||
? const Color(0XFF1F1F1F)
|
||||
: const Color(0XFF292929);
|
||||
|
||||
// Error and success colors
|
||||
Color get errorLight => brightness == Brightness.dark
|
||||
? const Color(0XFFF0C9CD)
|
||||
: const Color(0XFFFFF8F8);
|
||||
Color get successLight => brightness == Brightness.dark
|
||||
? const Color(0XFFBBD6B4)
|
||||
: const Color(0XFFF5FFFC);
|
||||
Color get success => brightness == Brightness.dark
|
||||
? const Color(0XFF32A64C)
|
||||
: const Color(0XFF2BB24A);
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/providers/user_provider.dart';
|
||||
import 'package:didvan/routes/route_generator.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
|
@ -14,15 +14,18 @@ class Didvan extends StatelessWidget {
|
|||
const Didvan({Key? key}) : super(key: key);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChangeNotifierProvider(
|
||||
return MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(
|
||||
create: (context) => UserProvider(),
|
||||
child: AnnotatedRegion<SystemUiOverlayStyle>(
|
||||
value: DesignConfig.systemUIOverlayStyle,
|
||||
),
|
||||
],
|
||||
child: MaterialApp(
|
||||
debugShowCheckedModeBanner: false,
|
||||
title: 'Didvan',
|
||||
theme: DesignConfig.lightTheme,
|
||||
darkTheme: DesignConfig.darkTheme,
|
||||
theme: LightThemeConfig.themeData,
|
||||
darkTheme: DarkThemeConfig.themeData,
|
||||
color: LightThemeConfig.themeData.primaryColor,
|
||||
themeMode: ThemeMode.light,
|
||||
onGenerateRoute: (settings) => RouteGenerator.generateRoute(settings),
|
||||
initialRoute: '/',
|
||||
|
|
@ -36,7 +39,6 @@ class Didvan extends StatelessWidget {
|
|||
],
|
||||
locale: const Locale("fa", "IR"),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/pages/authentication/authentication_state.dart';
|
||||
import 'package:didvan/pages/authentication/widgets/authentication_layout.dart';
|
||||
import 'package:didvan/widgets/didvan/button.dart';
|
||||
|
|
@ -47,7 +48,7 @@ class Verification extends StatelessWidget {
|
|||
pinTheme: PinTheme(
|
||||
fieldHeight: 48,
|
||||
fieldWidth: 48,
|
||||
inactiveColor: DesignConfig.borderColor,
|
||||
inactiveColor: Theme.of(context).colorScheme.border,
|
||||
activeFillColor: Theme.of(context).colorScheme.primary,
|
||||
activeColor: Theme.of(context).colorScheme.primary,
|
||||
borderRadius: DesignConfig.lowBorderRadius,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/pages/authentication/authentication_state.dart';
|
||||
import 'package:didvan/widgets/didvan/text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -16,9 +16,9 @@ class AuthenticationAppBar extends StatelessWidget {
|
|||
children: [
|
||||
GestureDetector(
|
||||
onTap: () => context.read<AuthenticationState>().currentPageIndex--,
|
||||
child: const Icon(
|
||||
child: Icon(
|
||||
Icons.arrow_back,
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
|
|
@ -28,7 +28,7 @@ class AuthenticationAppBar extends StatelessWidget {
|
|||
DidvanText(
|
||||
title!,
|
||||
style: Theme.of(context).textTheme.subtitle2,
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/pages/home/home_state.dart';
|
||||
import 'package:didvan/pages/home/news/news.dart';
|
||||
import 'package:didvan/pages/home/profile/profile.dart';
|
||||
|
|
@ -21,6 +22,10 @@ class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
|
|||
|
||||
@override
|
||||
void initState() {
|
||||
Future.delayed(Duration(milliseconds: 500), () {
|
||||
DesignConfig.context = context;
|
||||
DesignConfig.updateSystemUiOverlayStyle();
|
||||
});
|
||||
_tabController = TabController(length: 5, vsync: this);
|
||||
_tabController.addListener(() {
|
||||
context.read<HomeState>().currentPageIndex = _tabController.index;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/constants/app_icons.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
|
@ -17,14 +17,14 @@ class ProfilePhoto extends StatelessWidget {
|
|||
Container(
|
||||
height: 96,
|
||||
width: 96,
|
||||
decoration: const BoxDecoration(
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: DesignConfig.lightPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.focused,
|
||||
),
|
||||
child: const Icon(
|
||||
child: Icon(
|
||||
DidvanIcons.profile_solid,
|
||||
size: 60,
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
),
|
||||
),
|
||||
const Positioned(
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/pages/home/profile/widgets/menu_item.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/constants/app_icons.dart';
|
||||
import 'package:didvan/pages/home/profile/widgets/menu_item.dart';
|
||||
import 'package:didvan/pages/home/widgets/logo_app_bar.dart';
|
||||
|
|
@ -50,7 +49,7 @@ class Profile extends StatelessWidget {
|
|||
),
|
||||
const DidvanDivider(),
|
||||
MenuItem(
|
||||
title: 'پیامها',
|
||||
title: 'خروج از حساب کاربری',
|
||||
icon: DidvanIcons.sign_out_regular,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
onTap: () => {},
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/constants/app_icons.dart';
|
||||
import 'package:didvan/widgets/didvan/text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -9,14 +9,14 @@ class MenuItem extends StatelessWidget {
|
|||
final String? suffix;
|
||||
final VoidCallback onTap;
|
||||
final Widget? trailing;
|
||||
final Color color;
|
||||
final Color? color;
|
||||
const MenuItem({
|
||||
Key? key,
|
||||
required this.title,
|
||||
this.icon,
|
||||
this.suffix,
|
||||
required this.onTap,
|
||||
this.color = DesignConfig.darkPrimaryColor2,
|
||||
this.color,
|
||||
this.trailing,
|
||||
}) : super(key: key);
|
||||
|
||||
|
|
@ -28,13 +28,16 @@ class MenuItem extends StatelessWidget {
|
|||
children: [
|
||||
if (icon != null) Icon(icon, size: 18, color: color),
|
||||
if (icon != null) const SizedBox(width: 4),
|
||||
DidvanText(title, color: color),
|
||||
DidvanText(
|
||||
title,
|
||||
color: color ?? Theme.of(context).colorScheme.title,
|
||||
),
|
||||
const Spacer(),
|
||||
trailing ??
|
||||
Icon(
|
||||
DidvanIcons.angle_left_regular,
|
||||
size: 18,
|
||||
color: color,
|
||||
color: color ?? Theme.of(context).colorScheme.title,
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/pages/home/radar/widgets/categories_gird.dart';
|
||||
import 'package:didvan/pages/home/radar/widgets/categories_list.dart';
|
||||
import 'package:didvan/pages/home/radar/widgets/search_field.dart';
|
||||
|
|
@ -55,7 +56,7 @@ class _RadarState extends State<Radar> {
|
|||
child: DidvanText(
|
||||
'آخرین رصد',
|
||||
style: Theme.of(context).textTheme.subtitle1,
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/models/radar_category.dart';
|
||||
import 'package:didvan/pages/home/radar/radar_state.dart';
|
||||
import 'package:didvan/widgets/animated_visibility.dart';
|
||||
|
|
@ -47,9 +48,11 @@ class CategoriesList extends StatelessWidget {
|
|||
duration: DesignConfig.mediumAnimationDuration,
|
||||
child: _itemBuilder(
|
||||
RadarCategory(title: 'همه', asset: '', id: 0),
|
||||
context,
|
||||
),
|
||||
),
|
||||
for (var category in categories) _itemBuilder(category),
|
||||
for (var category in categories)
|
||||
_itemBuilder(category, context),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
@ -58,7 +61,7 @@ class CategoriesList extends StatelessWidget {
|
|||
);
|
||||
}
|
||||
|
||||
Widget _itemBuilder(RadarCategory category) {
|
||||
Widget _itemBuilder(RadarCategory category, BuildContext context) {
|
||||
return Container(
|
||||
margin: const EdgeInsets.only(left: 12),
|
||||
width: 100,
|
||||
|
|
@ -67,7 +70,7 @@ class CategoriesList extends StatelessWidget {
|
|||
child: DidvanText(category.title),
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
),
|
||||
borderRadius: DesignConfig.lowBorderRadius,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/widgets/animated_visibility.dart';
|
||||
import 'package:didvan/widgets/didvan/text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -27,7 +28,7 @@ class CategoryItem extends StatelessWidget {
|
|||
decoration: BoxDecoration(
|
||||
borderRadius: DesignConfig.lowBorderRadius,
|
||||
border: isColapsed
|
||||
? Border.all(color: DesignConfig.darkPrimaryColor2)
|
||||
? Border.all(color: Theme.of(context).colorScheme.title)
|
||||
: null,
|
||||
),
|
||||
child: Column(
|
||||
|
|
@ -38,7 +39,11 @@ class CategoryItem extends StatelessWidget {
|
|||
child: Container(
|
||||
width: ds.width / 5,
|
||||
height: ds.width / 5,
|
||||
decoration: DesignConfig.actionCardDecoration,
|
||||
decoration: BoxDecoration(
|
||||
color: Theme.of(context).colorScheme.surface,
|
||||
boxShadow: DesignConfig.defaultShadow,
|
||||
borderRadius: DesignConfig.mediumBorderRadius,
|
||||
),
|
||||
padding: const EdgeInsets.all(8),
|
||||
child: Image.asset(
|
||||
asset,
|
||||
|
|
@ -51,7 +56,7 @@ class CategoryItem extends StatelessWidget {
|
|||
DidvanText(
|
||||
title,
|
||||
style: Theme.of(context).textTheme.subtitle2,
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/constants/app_icons.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
|
@ -46,12 +46,12 @@ class _SearchFieldState extends State<SearchField> {
|
|||
prefixIcon: const Icon(
|
||||
DidvanIcons.search_regular,
|
||||
),
|
||||
enabledBorder: const OutlineInputBorder(
|
||||
borderRadius: BorderRadius.all(
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderRadius: const BorderRadius.all(
|
||||
Radius.circular(4),
|
||||
),
|
||||
borderSide: BorderSide(
|
||||
color: DesignConfig.borderColor,
|
||||
color: Theme.of(context).colorScheme.border,
|
||||
),
|
||||
),
|
||||
fillColor: Colors.red,
|
||||
|
|
@ -62,7 +62,7 @@ class _SearchFieldState extends State<SearchField> {
|
|||
),
|
||||
border: InputBorder.none,
|
||||
hintText: 'جستجو مطلب در رادار',
|
||||
hintStyle: const TextStyle(color: DesignConfig.hintColor),
|
||||
hintStyle: TextStyle(color: Theme.of(context).colorScheme.hint),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
@ -70,7 +70,7 @@ class _SearchFieldState extends State<SearchField> {
|
|||
|
||||
Color _fillColor() {
|
||||
if (_focusNode.hasFocus) {
|
||||
return DesignConfig.lightPrimaryColor3;
|
||||
return Theme.of(context).colorScheme.surface;
|
||||
}
|
||||
return Theme.of(context).colorScheme.surface;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/constants/app_icons.dart';
|
||||
import 'package:didvan/widgets/didvan/text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -40,8 +41,8 @@ class DidvanBNB extends StatelessWidget {
|
|||
_NavBarItem(
|
||||
isSelected: currentTabIndex == 2,
|
||||
title: 'رادار',
|
||||
selectedIcon: DidvanIcons.news_solid,
|
||||
unselectedIcon: DidvanIcons.news_regular,
|
||||
selectedIcon: DidvanIcons.radar_solid,
|
||||
unselectedIcon: DidvanIcons.radar_light,
|
||||
onTap: () => onTabChanged(2),
|
||||
),
|
||||
_NavBarItem(
|
||||
|
|
@ -85,7 +86,7 @@ class _NavBarItem extends StatelessWidget {
|
|||
child: Tooltip(
|
||||
message: title,
|
||||
decoration: BoxDecoration(
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
borderRadius: DesignConfig.highBorderRadius,
|
||||
boxShadow: DesignConfig.defaultShadow,
|
||||
),
|
||||
|
|
@ -104,19 +105,23 @@ class _NavBarItem extends StatelessWidget {
|
|||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: isSelected
|
||||
? DesignConfig.lightPrimaryColor2
|
||||
? Theme.of(context).colorScheme.focused
|
||||
: Theme.of(context).colorScheme.surface,
|
||||
),
|
||||
child: Icon(
|
||||
isSelected ? selectedIcon : unselectedIcon,
|
||||
size: 32,
|
||||
color: isSelected ? DesignConfig.darkPrimaryColor2 : null,
|
||||
color: isSelected
|
||||
? Theme.of(context).brightness == Brightness.dark
|
||||
? Theme.of(context).colorScheme.text
|
||||
: Theme.of(context).colorScheme.title
|
||||
: null,
|
||||
),
|
||||
),
|
||||
DidvanText(
|
||||
title,
|
||||
style: Theme.of(context).textTheme.caption,
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
),
|
||||
const Spacer(),
|
||||
],
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/main.dart';
|
||||
import 'package:didvan/routes/routes.dart';
|
||||
import 'package:didvan/widgets/logos/didvan_horizontal_logo.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -16,24 +18,30 @@ class _SplashState extends State<Splash> {
|
|||
void initState() {
|
||||
Future.delayed(
|
||||
const Duration(seconds: 2),
|
||||
() => Navigator.of(context).pushReplacementNamed(
|
||||
() {
|
||||
Navigator.of(context).pushReplacementNamed(
|
||||
Routes.home,
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
DesignConfig.context = context;
|
||||
return AnnotatedRegion<SystemUiOverlayStyle>(
|
||||
value: DesignConfig.systemUIOverlayStyle.copyWith(
|
||||
systemNavigationBarColor: DesignConfig.lightPrimaryColor3,
|
||||
value: DesignConfig.systemUiOverlayStyle.copyWith(
|
||||
systemNavigationBarColor: Theme.of(context).colorScheme.focused,
|
||||
),
|
||||
child: Container(
|
||||
child: Scaffold(
|
||||
body: Container(
|
||||
alignment: Alignment.center,
|
||||
padding: const EdgeInsets.all(60),
|
||||
color: DesignConfig.lightPrimaryColor3,
|
||||
color: Theme.of(context).colorScheme.focused,
|
||||
child: const DidvanVerticalLogo(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
import 'package:didvan/providers/core_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ThemeProvider extends CoreProvier {
|
||||
late ThemeMode themeMode;
|
||||
}
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/pages/authentication/authentication.dart';
|
||||
import 'package:didvan/pages/authentication/authentication_state.dart';
|
||||
import 'package:didvan/pages/home/home.dart';
|
||||
|
|
@ -57,12 +56,8 @@ class RouteGenerator {
|
|||
}
|
||||
|
||||
static Route _createRoute(page) {
|
||||
return PageRouteBuilder(
|
||||
pageBuilder: (context, animation, secondaryAnimation) => page,
|
||||
transitionDuration: DesignConfig.mediumAnimationDuration,
|
||||
transitionsBuilder: (context, animation, secondaryAnimation, child) {
|
||||
return FadeTransition(opacity: animation, child: child);
|
||||
},
|
||||
return MaterialPageRoute(
|
||||
builder: (context) => page,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ class ActionSheetUtils {
|
|||
|
||||
static AnnotatedRegion _customSystemOverlayStyle({required Widget child}) {
|
||||
return AnnotatedRegion<SystemUiOverlayStyle>(
|
||||
value: DesignConfig.systemUIOverlayStyle.copyWith(
|
||||
value: DesignConfig.systemUiOverlayStyle.copyWith(
|
||||
systemNavigationBarColor: Colors.black45,
|
||||
),
|
||||
child: child,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/models/view/app_bar_data.dart';
|
||||
import 'package:didvan/widgets/didvan/text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -18,7 +19,7 @@ class DidvanAppBar extends StatelessWidget {
|
|||
children: [
|
||||
IconButton(
|
||||
onPressed: () => Navigator.of(context).pop(),
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
icon: const Icon(Icons.arrow_back),
|
||||
),
|
||||
const SizedBox(width: 16),
|
||||
|
|
@ -28,7 +29,7 @@ class DidvanAppBar extends StatelessWidget {
|
|||
DidvanText(
|
||||
appBarData.title!,
|
||||
style: Theme.of(context).textTheme.headline3,
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: Theme.of(context).colorScheme.title,
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ class DidvanCard extends StatelessWidget {
|
|||
decoration: BoxDecoration(
|
||||
borderRadius: DesignConfig.lowBorderRadius,
|
||||
color: Theme.of(context).colorScheme.surface,
|
||||
border: DesignConfig.lightBorder,
|
||||
border: DesignConfig.cardBorder,
|
||||
),
|
||||
child: child,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class DidvanDivider extends StatelessWidget {
|
||||
|
|
@ -10,7 +10,7 @@ class DidvanDivider extends StatelessWidget {
|
|||
height: 1,
|
||||
width: double.infinity,
|
||||
margin: const EdgeInsets.symmetric(vertical: 16),
|
||||
color: DesignConfig.borderColor,
|
||||
color: Theme.of(context).colorScheme.border,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class DidvanText extends StatelessWidget {
|
||||
|
|
@ -12,7 +11,7 @@ class DidvanText extends StatelessWidget {
|
|||
const DidvanText(
|
||||
this.text, {
|
||||
Key? key,
|
||||
this.style = DesignConfig.body2Text,
|
||||
this.style,
|
||||
this.color,
|
||||
this.fontSize,
|
||||
this.fontWeight,
|
||||
|
|
@ -23,7 +22,7 @@ class DidvanText extends StatelessWidget {
|
|||
Widget build(BuildContext context) {
|
||||
return Text(
|
||||
text,
|
||||
style: style!.copyWith(
|
||||
style: (style ?? Theme.of(context).textTheme.bodyText2)!.copyWith(
|
||||
color: color,
|
||||
fontWeight: fontWeight,
|
||||
fontSize: fontSize,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/widgets/didvan/text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
|
@ -56,7 +57,7 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
|
|||
if (widget.title != null)
|
||||
DidvanText(
|
||||
widget.title!,
|
||||
color: !widget.enabled ? DesignConfig.hintColor : null,
|
||||
color: !widget.enabled ? Theme.of(context).colorScheme.hint : null,
|
||||
),
|
||||
if (widget.title != null) const SizedBox(height: 8),
|
||||
Container(
|
||||
|
|
@ -87,7 +88,7 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
|
|||
hintStyle: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText2!
|
||||
.copyWith(color: DesignConfig.hintColor),
|
||||
.copyWith(color: Theme.of(context).colorScheme.hint),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -101,18 +102,18 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
|
|||
} else if (_hasError) {
|
||||
return Theme.of(context).colorScheme.error;
|
||||
}
|
||||
return DesignConfig.borderColor;
|
||||
return Theme.of(context).colorScheme.border;
|
||||
}
|
||||
|
||||
Color _fillColor() {
|
||||
if (!widget.enabled) {
|
||||
return DesignConfig.secontCtaColor;
|
||||
return Theme.of(context).colorScheme.secondCTA;
|
||||
}
|
||||
if (_focusNode.hasFocus) {
|
||||
return DesignConfig.lightPrimaryColor3;
|
||||
return Theme.of(context).colorScheme.focused;
|
||||
}
|
||||
if (_hasError) {
|
||||
return DesignConfig.lightRedColor;
|
||||
return Theme.of(context).colorScheme.errorLight;
|
||||
}
|
||||
return Theme.of(context).colorScheme.surface;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/config/theme_data.dart';
|
||||
import 'package:didvan/widgets/didvan/text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ItemTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final IconData? icon;
|
||||
final Color color;
|
||||
final Color? color;
|
||||
|
||||
const ItemTitle({
|
||||
Key? key,
|
||||
required this.title,
|
||||
this.icon,
|
||||
this.color = DesignConfig.darkPrimaryColor2,
|
||||
this.color,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
|
|
@ -21,12 +21,13 @@ class ItemTitle extends StatelessWidget {
|
|||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if (icon != null) Icon(icon, color: color),
|
||||
if (icon != null)
|
||||
Icon(icon, color: color ?? Theme.of(context).colorScheme.title),
|
||||
if (icon != null) const SizedBox(width: 4),
|
||||
DidvanText(
|
||||
title,
|
||||
style: Theme.of(context).textTheme.subtitle1,
|
||||
color: DesignConfig.darkPrimaryColor2,
|
||||
color: color ?? Theme.of(context).colorScheme.title,
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
|
|||
14
pubspec.lock
14
pubspec.lock
|
|
@ -43,6 +43,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.15.0"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: crypto
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
cupertino_icons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -86,6 +93,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
hive:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: hive
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.5"
|
||||
http:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ dependencies:
|
|||
provider: ^6.0.1
|
||||
pin_code_fields: ^7.3.0
|
||||
rive: ^0.7.33
|
||||
hive: ^2.0.5
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
|
|
|||
Loading…
Reference in New Issue