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/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
class DesignConfig {
|
class DesignConfig {
|
||||||
static const backgroundColor = Color(0XFFF8F8FA);
|
static late BuildContext context;
|
||||||
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 const BorderRadius lowBorderRadius = BorderRadius.all(
|
static const BorderRadius lowBorderRadius = BorderRadius.all(
|
||||||
Radius.circular(8),
|
Radius.circular(8),
|
||||||
|
|
@ -91,29 +14,39 @@ class DesignConfig {
|
||||||
static const BorderRadius highBorderRadius = BorderRadius.all(
|
static const BorderRadius highBorderRadius = BorderRadius.all(
|
||||||
Radius.circular(16),
|
Radius.circular(16),
|
||||||
);
|
);
|
||||||
static final Border lightBorder = Border.all(color: DesignConfig.borderColor);
|
|
||||||
static final BoxDecoration actionCardDecoration = BoxDecoration(
|
static final Border cardBorder = Border.all(
|
||||||
color: lightPrimaryColor3,
|
color: Theme.of(context).colorScheme.cardBorder,
|
||||||
boxShadow: defaultShadow,
|
width: 0.25,
|
||||||
borderRadius: mediumBorderRadius,
|
|
||||||
);
|
);
|
||||||
static final List<BoxShadow> defaultShadow = [
|
|
||||||
BoxShadow(
|
static List<BoxShadow> get defaultShadow => [
|
||||||
color: currentColorScheme.primaryVariant.withOpacity(0.25),
|
BoxShadow(
|
||||||
blurRadius: 16,
|
color: const Color(0XFF1B3C59).withOpacity(0.25),
|
||||||
spreadRadius: 0,
|
blurRadius: 16,
|
||||||
)
|
spreadRadius: 0,
|
||||||
];
|
)
|
||||||
|
];
|
||||||
|
|
||||||
static const Duration lowAnimationDuration = Duration(milliseconds: 300);
|
static const Duration lowAnimationDuration = Duration(milliseconds: 300);
|
||||||
static const Duration mediumAnimationDuration = Duration(milliseconds: 600);
|
static const Duration mediumAnimationDuration = Duration(milliseconds: 600);
|
||||||
|
|
||||||
static final SystemUiOverlayStyle systemUIOverlayStyle = SystemUiOverlayStyle(
|
static SystemUiOverlayStyle get systemUiOverlayStyle {
|
||||||
statusBarBrightness: Brightness.dark,
|
return SystemUiOverlayStyle(
|
||||||
statusBarIconBrightness: Brightness.dark,
|
statusBarIconBrightness: Theme.of(context).brightness == Brightness.dark
|
||||||
statusBarColor: Colors.transparent,
|
? Brightness.light
|
||||||
systemNavigationBarColor: currentColorScheme.surface,
|
: Brightness.dark,
|
||||||
systemNavigationBarDividerColor: Colors.transparent,
|
statusBarColor: Colors.transparent,
|
||||||
systemNavigationBarIconBrightness: Brightness.dark,
|
systemNavigationBarColor: Theme.of(context).colorScheme.surface,
|
||||||
);
|
systemNavigationBarDividerColor: Colors.transparent,
|
||||||
|
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/design_config.dart';
|
||||||
|
import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/providers/user_provider.dart';
|
import 'package:didvan/providers/user_provider.dart';
|
||||||
import 'package:didvan/routes/route_generator.dart';
|
import 'package:didvan/routes/route_generator.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.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';
|
||||||
|
|
||||||
|
|
@ -14,28 +14,30 @@ class Didvan extends StatelessWidget {
|
||||||
const Didvan({Key? key}) : super(key: key);
|
const Didvan({Key? key}) : super(key: key);
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return ChangeNotifierProvider(
|
return MultiProvider(
|
||||||
create: (context) => UserProvider(),
|
providers: [
|
||||||
child: AnnotatedRegion<SystemUiOverlayStyle>(
|
ChangeNotifierProvider(
|
||||||
value: DesignConfig.systemUIOverlayStyle,
|
create: (context) => UserProvider(),
|
||||||
child: MaterialApp(
|
|
||||||
debugShowCheckedModeBanner: false,
|
|
||||||
title: 'Didvan',
|
|
||||||
theme: DesignConfig.lightTheme,
|
|
||||||
darkTheme: DesignConfig.darkTheme,
|
|
||||||
themeMode: ThemeMode.light,
|
|
||||||
onGenerateRoute: (settings) => RouteGenerator.generateRoute(settings),
|
|
||||||
initialRoute: '/',
|
|
||||||
localizationsDelegates: const [
|
|
||||||
GlobalCupertinoLocalizations.delegate,
|
|
||||||
GlobalMaterialLocalizations.delegate,
|
|
||||||
GlobalWidgetsLocalizations.delegate,
|
|
||||||
],
|
|
||||||
supportedLocales: const [
|
|
||||||
Locale("fa", "IR"),
|
|
||||||
],
|
|
||||||
locale: const Locale("fa", "IR"),
|
|
||||||
),
|
),
|
||||||
|
],
|
||||||
|
child: MaterialApp(
|
||||||
|
debugShowCheckedModeBanner: false,
|
||||||
|
title: 'Didvan',
|
||||||
|
theme: LightThemeConfig.themeData,
|
||||||
|
darkTheme: DarkThemeConfig.themeData,
|
||||||
|
color: LightThemeConfig.themeData.primaryColor,
|
||||||
|
themeMode: ThemeMode.light,
|
||||||
|
onGenerateRoute: (settings) => RouteGenerator.generateRoute(settings),
|
||||||
|
initialRoute: '/',
|
||||||
|
localizationsDelegates: const [
|
||||||
|
GlobalCupertinoLocalizations.delegate,
|
||||||
|
GlobalMaterialLocalizations.delegate,
|
||||||
|
GlobalWidgetsLocalizations.delegate,
|
||||||
|
],
|
||||||
|
supportedLocales: const [
|
||||||
|
Locale("fa", "IR"),
|
||||||
|
],
|
||||||
|
locale: const Locale("fa", "IR"),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
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/authentication_state.dart';
|
||||||
import 'package:didvan/pages/authentication/widgets/authentication_layout.dart';
|
import 'package:didvan/pages/authentication/widgets/authentication_layout.dart';
|
||||||
import 'package:didvan/widgets/didvan/button.dart';
|
import 'package:didvan/widgets/didvan/button.dart';
|
||||||
|
|
@ -47,7 +48,7 @@ class Verification extends StatelessWidget {
|
||||||
pinTheme: PinTheme(
|
pinTheme: PinTheme(
|
||||||
fieldHeight: 48,
|
fieldHeight: 48,
|
||||||
fieldWidth: 48,
|
fieldWidth: 48,
|
||||||
inactiveColor: DesignConfig.borderColor,
|
inactiveColor: Theme.of(context).colorScheme.border,
|
||||||
activeFillColor: Theme.of(context).colorScheme.primary,
|
activeFillColor: Theme.of(context).colorScheme.primary,
|
||||||
activeColor: Theme.of(context).colorScheme.primary,
|
activeColor: Theme.of(context).colorScheme.primary,
|
||||||
borderRadius: DesignConfig.lowBorderRadius,
|
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/pages/authentication/authentication_state.dart';
|
||||||
import 'package:didvan/widgets/didvan/text.dart';
|
import 'package:didvan/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
@ -16,9 +16,9 @@ class AuthenticationAppBar extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () => context.read<AuthenticationState>().currentPageIndex--,
|
onTap: () => context.read<AuthenticationState>().currentPageIndex--,
|
||||||
child: const Icon(
|
child: Icon(
|
||||||
Icons.arrow_back,
|
Icons.arrow_back,
|
||||||
color: DesignConfig.darkPrimaryColor2,
|
color: Theme.of(context).colorScheme.title,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
|
|
@ -28,7 +28,7 @@ class AuthenticationAppBar extends StatelessWidget {
|
||||||
DidvanText(
|
DidvanText(
|
||||||
title!,
|
title!,
|
||||||
style: Theme.of(context).textTheme.subtitle2,
|
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/home_state.dart';
|
||||||
import 'package:didvan/pages/home/news/news.dart';
|
import 'package:didvan/pages/home/news/news.dart';
|
||||||
import 'package:didvan/pages/home/profile/profile.dart';
|
import 'package:didvan/pages/home/profile/profile.dart';
|
||||||
|
|
@ -21,6 +22,10 @@ class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
Future.delayed(Duration(milliseconds: 500), () {
|
||||||
|
DesignConfig.context = context;
|
||||||
|
DesignConfig.updateSystemUiOverlayStyle();
|
||||||
|
});
|
||||||
_tabController = TabController(length: 5, vsync: this);
|
_tabController = TabController(length: 5, vsync: this);
|
||||||
_tabController.addListener(() {
|
_tabController.addListener(() {
|
||||||
context.read<HomeState>().currentPageIndex = _tabController.index;
|
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:didvan/constants/app_icons.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
|
@ -17,14 +17,14 @@ class ProfilePhoto extends StatelessWidget {
|
||||||
Container(
|
Container(
|
||||||
height: 96,
|
height: 96,
|
||||||
width: 96,
|
width: 96,
|
||||||
decoration: const BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
color: DesignConfig.lightPrimaryColor2,
|
color: Theme.of(context).colorScheme.focused,
|
||||||
),
|
),
|
||||||
child: const Icon(
|
child: Icon(
|
||||||
DidvanIcons.profile_solid,
|
DidvanIcons.profile_solid,
|
||||||
size: 60,
|
size: 60,
|
||||||
color: DesignConfig.darkPrimaryColor2,
|
color: Theme.of(context).colorScheme.title,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const Positioned(
|
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:didvan/pages/home/profile/widgets/menu_item.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.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/constants/app_icons.dart';
|
||||||
import 'package:didvan/pages/home/profile/widgets/menu_item.dart';
|
import 'package:didvan/pages/home/profile/widgets/menu_item.dart';
|
||||||
import 'package:didvan/pages/home/widgets/logo_app_bar.dart';
|
import 'package:didvan/pages/home/widgets/logo_app_bar.dart';
|
||||||
|
|
@ -50,7 +49,7 @@ class Profile extends StatelessWidget {
|
||||||
),
|
),
|
||||||
const DidvanDivider(),
|
const DidvanDivider(),
|
||||||
MenuItem(
|
MenuItem(
|
||||||
title: 'پیامها',
|
title: 'خروج از حساب کاربری',
|
||||||
icon: DidvanIcons.sign_out_regular,
|
icon: DidvanIcons.sign_out_regular,
|
||||||
color: Theme.of(context).colorScheme.secondary,
|
color: Theme.of(context).colorScheme.secondary,
|
||||||
onTap: () => {},
|
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/constants/app_icons.dart';
|
||||||
import 'package:didvan/widgets/didvan/text.dart';
|
import 'package:didvan/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
@ -9,14 +9,14 @@ class MenuItem extends StatelessWidget {
|
||||||
final String? suffix;
|
final String? suffix;
|
||||||
final VoidCallback onTap;
|
final VoidCallback onTap;
|
||||||
final Widget? trailing;
|
final Widget? trailing;
|
||||||
final Color color;
|
final Color? color;
|
||||||
const MenuItem({
|
const MenuItem({
|
||||||
Key? key,
|
Key? key,
|
||||||
required this.title,
|
required this.title,
|
||||||
this.icon,
|
this.icon,
|
||||||
this.suffix,
|
this.suffix,
|
||||||
required this.onTap,
|
required this.onTap,
|
||||||
this.color = DesignConfig.darkPrimaryColor2,
|
this.color,
|
||||||
this.trailing,
|
this.trailing,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
|
|
@ -28,13 +28,16 @@ class MenuItem extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
if (icon != null) Icon(icon, size: 18, color: color),
|
if (icon != null) Icon(icon, size: 18, color: color),
|
||||||
if (icon != null) const SizedBox(width: 4),
|
if (icon != null) const SizedBox(width: 4),
|
||||||
DidvanText(title, color: color),
|
DidvanText(
|
||||||
|
title,
|
||||||
|
color: color ?? Theme.of(context).colorScheme.title,
|
||||||
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
trailing ??
|
trailing ??
|
||||||
Icon(
|
Icon(
|
||||||
DidvanIcons.angle_left_regular,
|
DidvanIcons.angle_left_regular,
|
||||||
size: 18,
|
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/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_gird.dart';
|
||||||
import 'package:didvan/pages/home/radar/widgets/categories_list.dart';
|
import 'package:didvan/pages/home/radar/widgets/categories_list.dart';
|
||||||
import 'package:didvan/pages/home/radar/widgets/search_field.dart';
|
import 'package:didvan/pages/home/radar/widgets/search_field.dart';
|
||||||
|
|
@ -55,7 +56,7 @@ class _RadarState extends State<Radar> {
|
||||||
child: DidvanText(
|
child: DidvanText(
|
||||||
'آخرین رصد',
|
'آخرین رصد',
|
||||||
style: Theme.of(context).textTheme.subtitle1,
|
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/design_config.dart';
|
||||||
|
import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/models/radar_category.dart';
|
import 'package:didvan/models/radar_category.dart';
|
||||||
import 'package:didvan/pages/home/radar/radar_state.dart';
|
import 'package:didvan/pages/home/radar/radar_state.dart';
|
||||||
import 'package:didvan/widgets/animated_visibility.dart';
|
import 'package:didvan/widgets/animated_visibility.dart';
|
||||||
|
|
@ -47,9 +48,11 @@ class CategoriesList extends StatelessWidget {
|
||||||
duration: DesignConfig.mediumAnimationDuration,
|
duration: DesignConfig.mediumAnimationDuration,
|
||||||
child: _itemBuilder(
|
child: _itemBuilder(
|
||||||
RadarCategory(title: 'همه', asset: '', id: 0),
|
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(
|
return Container(
|
||||||
margin: const EdgeInsets.only(left: 12),
|
margin: const EdgeInsets.only(left: 12),
|
||||||
width: 100,
|
width: 100,
|
||||||
|
|
@ -67,7 +70,7 @@ class CategoriesList extends StatelessWidget {
|
||||||
child: DidvanText(category.title),
|
child: DidvanText(category.title),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
color: DesignConfig.darkPrimaryColor2,
|
color: Theme.of(context).colorScheme.title,
|
||||||
),
|
),
|
||||||
borderRadius: DesignConfig.lowBorderRadius,
|
borderRadius: DesignConfig.lowBorderRadius,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
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/animated_visibility.dart';
|
||||||
import 'package:didvan/widgets/didvan/text.dart';
|
import 'package:didvan/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
@ -27,7 +28,7 @@ class CategoryItem extends StatelessWidget {
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: DesignConfig.lowBorderRadius,
|
borderRadius: DesignConfig.lowBorderRadius,
|
||||||
border: isColapsed
|
border: isColapsed
|
||||||
? Border.all(color: DesignConfig.darkPrimaryColor2)
|
? Border.all(color: Theme.of(context).colorScheme.title)
|
||||||
: null,
|
: null,
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
|
|
@ -38,7 +39,11 @@ class CategoryItem extends StatelessWidget {
|
||||||
child: Container(
|
child: Container(
|
||||||
width: ds.width / 5,
|
width: ds.width / 5,
|
||||||
height: 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),
|
padding: const EdgeInsets.all(8),
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
asset,
|
asset,
|
||||||
|
|
@ -51,7 +56,7 @@ class CategoryItem extends StatelessWidget {
|
||||||
DidvanText(
|
DidvanText(
|
||||||
title,
|
title,
|
||||||
style: Theme.of(context).textTheme.subtitle2,
|
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:didvan/constants/app_icons.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
|
@ -46,12 +46,12 @@ class _SearchFieldState extends State<SearchField> {
|
||||||
prefixIcon: const Icon(
|
prefixIcon: const Icon(
|
||||||
DidvanIcons.search_regular,
|
DidvanIcons.search_regular,
|
||||||
),
|
),
|
||||||
enabledBorder: const OutlineInputBorder(
|
enabledBorder: OutlineInputBorder(
|
||||||
borderRadius: BorderRadius.all(
|
borderRadius: const BorderRadius.all(
|
||||||
Radius.circular(4),
|
Radius.circular(4),
|
||||||
),
|
),
|
||||||
borderSide: BorderSide(
|
borderSide: BorderSide(
|
||||||
color: DesignConfig.borderColor,
|
color: Theme.of(context).colorScheme.border,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
fillColor: Colors.red,
|
fillColor: Colors.red,
|
||||||
|
|
@ -62,7 +62,7 @@ class _SearchFieldState extends State<SearchField> {
|
||||||
),
|
),
|
||||||
border: InputBorder.none,
|
border: InputBorder.none,
|
||||||
hintText: 'جستجو مطلب در رادار',
|
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() {
|
Color _fillColor() {
|
||||||
if (_focusNode.hasFocus) {
|
if (_focusNode.hasFocus) {
|
||||||
return DesignConfig.lightPrimaryColor3;
|
return Theme.of(context).colorScheme.surface;
|
||||||
}
|
}
|
||||||
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/design_config.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/widgets/didvan/text.dart';
|
import 'package:didvan/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
@ -40,8 +41,8 @@ class DidvanBNB extends StatelessWidget {
|
||||||
_NavBarItem(
|
_NavBarItem(
|
||||||
isSelected: currentTabIndex == 2,
|
isSelected: currentTabIndex == 2,
|
||||||
title: 'رادار',
|
title: 'رادار',
|
||||||
selectedIcon: DidvanIcons.news_solid,
|
selectedIcon: DidvanIcons.radar_solid,
|
||||||
unselectedIcon: DidvanIcons.news_regular,
|
unselectedIcon: DidvanIcons.radar_light,
|
||||||
onTap: () => onTabChanged(2),
|
onTap: () => onTabChanged(2),
|
||||||
),
|
),
|
||||||
_NavBarItem(
|
_NavBarItem(
|
||||||
|
|
@ -85,7 +86,7 @@ class _NavBarItem extends StatelessWidget {
|
||||||
child: Tooltip(
|
child: Tooltip(
|
||||||
message: title,
|
message: title,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: DesignConfig.darkPrimaryColor2,
|
color: Theme.of(context).colorScheme.title,
|
||||||
borderRadius: DesignConfig.highBorderRadius,
|
borderRadius: DesignConfig.highBorderRadius,
|
||||||
boxShadow: DesignConfig.defaultShadow,
|
boxShadow: DesignConfig.defaultShadow,
|
||||||
),
|
),
|
||||||
|
|
@ -104,19 +105,23 @@ class _NavBarItem extends StatelessWidget {
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
color: isSelected
|
color: isSelected
|
||||||
? DesignConfig.lightPrimaryColor2
|
? Theme.of(context).colorScheme.focused
|
||||||
: Theme.of(context).colorScheme.surface,
|
: Theme.of(context).colorScheme.surface,
|
||||||
),
|
),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
isSelected ? selectedIcon : unselectedIcon,
|
isSelected ? selectedIcon : unselectedIcon,
|
||||||
size: 32,
|
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(
|
DidvanText(
|
||||||
title,
|
title,
|
||||||
style: Theme.of(context).textTheme.caption,
|
style: Theme.of(context).textTheme.caption,
|
||||||
color: DesignConfig.darkPrimaryColor2,
|
color: Theme.of(context).colorScheme.title,
|
||||||
),
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
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/routes/routes.dart';
|
||||||
import 'package:didvan/widgets/logos/didvan_horizontal_logo.dart';
|
import 'package:didvan/widgets/logos/didvan_horizontal_logo.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
@ -16,23 +18,29 @@ class _SplashState extends State<Splash> {
|
||||||
void initState() {
|
void initState() {
|
||||||
Future.delayed(
|
Future.delayed(
|
||||||
const Duration(seconds: 2),
|
const Duration(seconds: 2),
|
||||||
() => Navigator.of(context).pushReplacementNamed(
|
() {
|
||||||
Routes.home,
|
Navigator.of(context).pushReplacementNamed(
|
||||||
),
|
Routes.home,
|
||||||
|
);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
DesignConfig.context = context;
|
||||||
return AnnotatedRegion<SystemUiOverlayStyle>(
|
return AnnotatedRegion<SystemUiOverlayStyle>(
|
||||||
value: DesignConfig.systemUIOverlayStyle.copyWith(
|
value: DesignConfig.systemUiOverlayStyle.copyWith(
|
||||||
systemNavigationBarColor: DesignConfig.lightPrimaryColor3,
|
systemNavigationBarColor: Theme.of(context).colorScheme.focused,
|
||||||
),
|
),
|
||||||
child: Container(
|
child: Scaffold(
|
||||||
padding: const EdgeInsets.all(60),
|
body: Container(
|
||||||
color: DesignConfig.lightPrimaryColor3,
|
alignment: Alignment.center,
|
||||||
child: const DidvanVerticalLogo(),
|
padding: const EdgeInsets.all(60),
|
||||||
|
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.dart';
|
||||||
import 'package:didvan/pages/authentication/authentication_state.dart';
|
import 'package:didvan/pages/authentication/authentication_state.dart';
|
||||||
import 'package:didvan/pages/home/home.dart';
|
import 'package:didvan/pages/home/home.dart';
|
||||||
|
|
@ -57,12 +56,8 @@ class RouteGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Route _createRoute(page) {
|
static Route _createRoute(page) {
|
||||||
return PageRouteBuilder(
|
return MaterialPageRoute(
|
||||||
pageBuilder: (context, animation, secondaryAnimation) => page,
|
builder: (context) => page,
|
||||||
transitionDuration: DesignConfig.mediumAnimationDuration,
|
|
||||||
transitionsBuilder: (context, animation, secondaryAnimation, child) {
|
|
||||||
return FadeTransition(opacity: animation, child: child);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ class ActionSheetUtils {
|
||||||
|
|
||||||
static AnnotatedRegion _customSystemOverlayStyle({required Widget child}) {
|
static AnnotatedRegion _customSystemOverlayStyle({required Widget child}) {
|
||||||
return AnnotatedRegion<SystemUiOverlayStyle>(
|
return AnnotatedRegion<SystemUiOverlayStyle>(
|
||||||
value: DesignConfig.systemUIOverlayStyle.copyWith(
|
value: DesignConfig.systemUiOverlayStyle.copyWith(
|
||||||
systemNavigationBarColor: Colors.black45,
|
systemNavigationBarColor: Colors.black45,
|
||||||
),
|
),
|
||||||
child: child,
|
child: child,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
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/models/view/app_bar_data.dart';
|
||||||
import 'package:didvan/widgets/didvan/text.dart';
|
import 'package:didvan/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
@ -18,7 +19,7 @@ class DidvanAppBar extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () => Navigator.of(context).pop(),
|
onPressed: () => Navigator.of(context).pop(),
|
||||||
color: DesignConfig.darkPrimaryColor2,
|
color: Theme.of(context).colorScheme.title,
|
||||||
icon: const Icon(Icons.arrow_back),
|
icon: const Icon(Icons.arrow_back),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 16),
|
const SizedBox(width: 16),
|
||||||
|
|
@ -28,7 +29,7 @@ class DidvanAppBar extends StatelessWidget {
|
||||||
DidvanText(
|
DidvanText(
|
||||||
appBarData.title!,
|
appBarData.title!,
|
||||||
style: Theme.of(context).textTheme.headline3,
|
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(
|
decoration: BoxDecoration(
|
||||||
borderRadius: DesignConfig.lowBorderRadius,
|
borderRadius: DesignConfig.lowBorderRadius,
|
||||||
color: Theme.of(context).colorScheme.surface,
|
color: Theme.of(context).colorScheme.surface,
|
||||||
border: DesignConfig.lightBorder,
|
border: DesignConfig.cardBorder,
|
||||||
),
|
),
|
||||||
child: child,
|
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';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class DidvanDivider extends StatelessWidget {
|
class DidvanDivider extends StatelessWidget {
|
||||||
|
|
@ -10,7 +10,7 @@ class DidvanDivider extends StatelessWidget {
|
||||||
height: 1,
|
height: 1,
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
margin: const EdgeInsets.symmetric(vertical: 16),
|
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';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class DidvanText extends StatelessWidget {
|
class DidvanText extends StatelessWidget {
|
||||||
|
|
@ -12,7 +11,7 @@ class DidvanText extends StatelessWidget {
|
||||||
const DidvanText(
|
const DidvanText(
|
||||||
this.text, {
|
this.text, {
|
||||||
Key? key,
|
Key? key,
|
||||||
this.style = DesignConfig.body2Text,
|
this.style,
|
||||||
this.color,
|
this.color,
|
||||||
this.fontSize,
|
this.fontSize,
|
||||||
this.fontWeight,
|
this.fontWeight,
|
||||||
|
|
@ -23,7 +22,7 @@ class DidvanText extends StatelessWidget {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Text(
|
return Text(
|
||||||
text,
|
text,
|
||||||
style: style!.copyWith(
|
style: (style ?? Theme.of(context).textTheme.bodyText2)!.copyWith(
|
||||||
color: color,
|
color: color,
|
||||||
fontWeight: fontWeight,
|
fontWeight: fontWeight,
|
||||||
fontSize: fontSize,
|
fontSize: fontSize,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
import 'package:didvan/config/design_config.dart';
|
||||||
|
import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/widgets/didvan/text.dart';
|
import 'package:didvan/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
|
@ -56,7 +57,7 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
|
||||||
if (widget.title != null)
|
if (widget.title != null)
|
||||||
DidvanText(
|
DidvanText(
|
||||||
widget.title!,
|
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),
|
if (widget.title != null) const SizedBox(height: 8),
|
||||||
Container(
|
Container(
|
||||||
|
|
@ -87,7 +88,7 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
|
||||||
hintStyle: Theme.of(context)
|
hintStyle: Theme.of(context)
|
||||||
.textTheme
|
.textTheme
|
||||||
.bodyText2!
|
.bodyText2!
|
||||||
.copyWith(color: DesignConfig.hintColor),
|
.copyWith(color: Theme.of(context).colorScheme.hint),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -101,18 +102,18 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
|
||||||
} else if (_hasError) {
|
} else if (_hasError) {
|
||||||
return Theme.of(context).colorScheme.error;
|
return Theme.of(context).colorScheme.error;
|
||||||
}
|
}
|
||||||
return DesignConfig.borderColor;
|
return Theme.of(context).colorScheme.border;
|
||||||
}
|
}
|
||||||
|
|
||||||
Color _fillColor() {
|
Color _fillColor() {
|
||||||
if (!widget.enabled) {
|
if (!widget.enabled) {
|
||||||
return DesignConfig.secontCtaColor;
|
return Theme.of(context).colorScheme.secondCTA;
|
||||||
}
|
}
|
||||||
if (_focusNode.hasFocus) {
|
if (_focusNode.hasFocus) {
|
||||||
return DesignConfig.lightPrimaryColor3;
|
return Theme.of(context).colorScheme.focused;
|
||||||
}
|
}
|
||||||
if (_hasError) {
|
if (_hasError) {
|
||||||
return DesignConfig.lightRedColor;
|
return Theme.of(context).colorScheme.errorLight;
|
||||||
}
|
}
|
||||||
return Theme.of(context).colorScheme.surface;
|
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:didvan/widgets/didvan/text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class ItemTitle extends StatelessWidget {
|
class ItemTitle extends StatelessWidget {
|
||||||
final String title;
|
final String title;
|
||||||
final IconData? icon;
|
final IconData? icon;
|
||||||
final Color color;
|
final Color? color;
|
||||||
|
|
||||||
const ItemTitle({
|
const ItemTitle({
|
||||||
Key? key,
|
Key? key,
|
||||||
required this.title,
|
required this.title,
|
||||||
this.icon,
|
this.icon,
|
||||||
this.color = DesignConfig.darkPrimaryColor2,
|
this.color,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
@ -21,12 +21,13 @@ class ItemTitle extends StatelessWidget {
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
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),
|
if (icon != null) const SizedBox(width: 4),
|
||||||
DidvanText(
|
DidvanText(
|
||||||
title,
|
title,
|
||||||
style: Theme.of(context).textTheme.subtitle1,
|
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"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.15.0"
|
version: "1.15.0"
|
||||||
|
crypto:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: crypto
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.1"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -86,6 +93,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.0"
|
||||||
|
hive:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: hive
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.5"
|
||||||
http:
|
http:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ dependencies:
|
||||||
provider: ^6.0.1
|
provider: ^6.0.1
|
||||||
pin_code_fields: ^7.3.0
|
pin_code_fields: ^7.3.0
|
||||||
rive: ^0.7.33
|
rive: ^0.7.33
|
||||||
|
hive: ^2.0.5
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue