dark theme configuration

This commit is contained in:
MohammadTaha Basiri 2021-12-22 10:41:45 +03:30
parent ec321d2e7b
commit c199785b98
27 changed files with 389 additions and 194 deletions

View File

@ -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);
}
}

213
lib/config/theme_data.dart Normal file
View File

@ -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);
}

View File

@ -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"),
),
),
);
}
}

View File

@ -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,

View File

@ -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,
)
],
),

View File

@ -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;

View File

@ -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(

View File

@ -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';

View File

@ -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: () => {},

View File

@ -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,
),
],
),

View File

@ -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,
),
),
),

View File

@ -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,
),

View File

@ -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,
),
],
),

View File

@ -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;
}

View File

@ -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(),
],

View File

@ -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(),
),
),
);
}
}

View File

@ -0,0 +1,6 @@
import 'package:didvan/providers/core_provider.dart';
import 'package:flutter/material.dart';
class ThemeProvider extends CoreProvier {
late ThemeMode themeMode;
}

View File

@ -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,
);
}
}

View File

@ -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,

View File

@ -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,
),
],
),

View File

@ -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,
);

View File

@ -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,
);
}
}

View File

@ -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,

View File

@ -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;
}

View File

@ -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,
)
],
),

View File

@ -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:

View File

@ -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: