D1APP-29 profile (static)
This commit is contained in:
parent
4df0f495bd
commit
42362c41fa
|
|
@ -2,13 +2,17 @@ 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 const Color lightPrimaryColor2 = Color(0XFFE6F3FA);
|
static const Color lightPrimaryColor2 = Color(0XFFE6F3FA);
|
||||||
static const Color lightPrimaryColor3 = Color(0XFFF5FAFC);
|
static const Color lightPrimaryColor3 = Color(0XFFF5FAFC);
|
||||||
static const Color primaryColor = Color(0XFF007EA7);
|
static const Color primaryColor = Color(0XFF007EA7);
|
||||||
static const Color darkPrimaryColor2 = Color(0XFF1B3C59);
|
static const Color darkPrimaryColor2 = Color(0XFF1B3C59);
|
||||||
|
|
||||||
static const Color greyColor4 = Color(0XFFE0E0E0);
|
static const Color cardBorderColor = Color(0XFFEBEBEB);
|
||||||
static const Color greyColor5 = Color(0XFFE0E0E0);
|
static const Color borderColor = Color(0XFFE0E0E0);
|
||||||
|
static const Color hintColor = Color(0XFFE0E0E0);
|
||||||
|
static const Color captionColor = Color(0XFF666666);
|
||||||
|
|
||||||
static const Color lightRedColor = Color(0XFFFFF8F8);
|
static const Color lightRedColor = Color(0XFFFFF8F8);
|
||||||
|
|
||||||
|
|
@ -18,11 +22,12 @@ class DesignConfig {
|
||||||
fontFamily: 'Dana-FA',
|
fontFamily: 'Dana-FA',
|
||||||
textTheme: const TextTheme(
|
textTheme: const TextTheme(
|
||||||
bodyText1: body1Text,
|
bodyText1: body1Text,
|
||||||
bodyText2: body1Text,
|
bodyText2: body2Text,
|
||||||
caption: captionText,
|
caption: captionText,
|
||||||
subtitle2: subtitle2Text,
|
subtitle2: subtitle2Text,
|
||||||
subtitle1: subtitle1Text,
|
subtitle1: subtitle1Text,
|
||||||
),
|
),
|
||||||
|
scaffoldBackgroundColor: backgroundColor,
|
||||||
);
|
);
|
||||||
|
|
||||||
static const ColorScheme lightColorScheme = ColorScheme(
|
static const ColorScheme lightColorScheme = ColorScheme(
|
||||||
|
|
@ -31,7 +36,7 @@ class DesignConfig {
|
||||||
secondary: Color(0XFFD61515),
|
secondary: Color(0XFFD61515),
|
||||||
secondaryVariant: Color(0XFFA30001),
|
secondaryVariant: Color(0XFFA30001),
|
||||||
surface: Colors.white,
|
surface: Colors.white,
|
||||||
background: Color(0XFFF8F8FA),
|
background: backgroundColor,
|
||||||
error: Color(0XFFF00505),
|
error: Color(0XFFF00505),
|
||||||
onPrimary: Colors.white,
|
onPrimary: Colors.white,
|
||||||
onSecondary: Colors.white,
|
onSecondary: Colors.white,
|
||||||
|
|
@ -52,10 +57,16 @@ class DesignConfig {
|
||||||
fontWeight: FontWeight.w700,
|
fontWeight: FontWeight.w700,
|
||||||
);
|
);
|
||||||
static const TextStyle body1Text = TextStyle(
|
static const TextStyle body1Text = TextStyle(
|
||||||
fontSize: 14,
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
);
|
||||||
|
static const TextStyle body2Text = TextStyle(
|
||||||
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
);
|
);
|
||||||
static const TextStyle captionText = TextStyle(
|
static const TextStyle captionText = TextStyle(
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
|
color: captionColor,
|
||||||
);
|
);
|
||||||
|
|
||||||
static const BorderRadius lowBorderRadius = BorderRadius.all(
|
static const BorderRadius lowBorderRadius = BorderRadius.all(
|
||||||
|
|
@ -67,7 +78,7 @@ 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.greyColor4);
|
static final Border lightBorder = Border.all(color: DesignConfig.borderColor);
|
||||||
static final BoxDecoration actionCardDecoration = BoxDecoration(
|
static final BoxDecoration actionCardDecoration = BoxDecoration(
|
||||||
color: lightPrimaryColor3,
|
color: lightPrimaryColor3,
|
||||||
boxShadow: defaultShadow,
|
boxShadow: defaultShadow,
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ class Verification extends StatelessWidget {
|
||||||
pinTheme: PinTheme(
|
pinTheme: PinTheme(
|
||||||
fieldHeight: 48,
|
fieldHeight: 48,
|
||||||
fieldWidth: 48,
|
fieldWidth: 48,
|
||||||
inactiveColor: DesignConfig.greyColor4,
|
inactiveColor: DesignConfig.borderColor,
|
||||||
activeFillColor: Theme.of(context).primaryColorLight,
|
activeFillColor: Theme.of(context).primaryColorLight,
|
||||||
activeColor: Theme.of(context).primaryColor,
|
activeColor: Theme.of(context).primaryColor,
|
||||||
borderRadius: DesignConfig.lowBorderRadius,
|
borderRadius: DesignConfig.lowBorderRadius,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import 'package:didvan/pages/home/radar/radar.dart';
|
||||||
import 'package:didvan/pages/home/radar/radar_state.dart';
|
import 'package:didvan/pages/home/radar/radar_state.dart';
|
||||||
import 'package:didvan/pages/home/statistics/statistics.dart';
|
import 'package:didvan/pages/home/statistics/statistics.dart';
|
||||||
import 'package:didvan/pages/home/studio/studio.dart';
|
import 'package:didvan/pages/home/studio/studio.dart';
|
||||||
import 'package:didvan/pages/home/widgets/didvan_bnb.dart';
|
import 'package:didvan/pages/home/widgets/bnb.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class EditProfile extends StatelessWidget {
|
||||||
|
const EditProfile({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return const Scaffold();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,3 +1,12 @@
|
||||||
|
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';
|
||||||
|
import 'package:didvan/routes/routes.dart';
|
||||||
|
import 'package:didvan/widgets/didvan/card.dart';
|
||||||
|
import 'package:didvan/widgets/didvan/divider.dart';
|
||||||
|
import 'package:didvan/widgets/didvan/text.dart';
|
||||||
|
import 'package:didvan/widgets/item_title.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class Profile extends StatelessWidget {
|
class Profile extends StatelessWidget {
|
||||||
|
|
@ -5,6 +14,84 @@ class Profile extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container();
|
return SingleChildScrollView(
|
||||||
|
padding: const EdgeInsets.all(16),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
const LogoAppBar(hasExtraPadding: false),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
DidvanCard(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
MenuItem(
|
||||||
|
title: 'پیامها',
|
||||||
|
icon: DidvanIcons.message_regular,
|
||||||
|
onTap: () => {},
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuItem(
|
||||||
|
title: 'ویرایش پروفایل',
|
||||||
|
icon: DidvanIcons.user_edit_regular,
|
||||||
|
onTap: () => {},
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuItem(
|
||||||
|
title: 'تنظیمات',
|
||||||
|
icon: DidvanIcons.setting_regular,
|
||||||
|
onTap: () => {},
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuItem(
|
||||||
|
title: 'نشان شدهها',
|
||||||
|
icon: DidvanIcons.bookmark_regular,
|
||||||
|
onTap: () => {},
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuItem(
|
||||||
|
title: 'پیامها',
|
||||||
|
icon: DidvanIcons.sign_out_regular,
|
||||||
|
color: Theme.of(context).colorScheme.secondary,
|
||||||
|
onTap: () => {},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const ItemTitle(
|
||||||
|
title: 'درباره ما',
|
||||||
|
icon: DidvanIcons.info_circle_regular,
|
||||||
|
),
|
||||||
|
DidvanCard(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
MenuItem(
|
||||||
|
icon: DidvanIcons.didvan_solid,
|
||||||
|
title: 'معرفی دیدوان',
|
||||||
|
onTap: () => {},
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuItem(
|
||||||
|
icon: DidvanIcons.support_regular,
|
||||||
|
title: 'پیام به پشتیبانی',
|
||||||
|
onTap: () => {},
|
||||||
|
),
|
||||||
|
const DidvanDivider(),
|
||||||
|
MenuItem(
|
||||||
|
icon: DidvanIcons.alert_regular,
|
||||||
|
title: 'حریم خصوصی',
|
||||||
|
onTap: () => {},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
DidvanText(
|
||||||
|
'نسخه نرمافزار: آزمایشی',
|
||||||
|
style: Theme.of(context).textTheme.bodyText2,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
import 'package:didvan/config/design_config.dart';
|
||||||
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
|
import 'package:didvan/widgets/didvan/text.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class MenuItem extends StatelessWidget {
|
||||||
|
final String title;
|
||||||
|
final IconData? icon;
|
||||||
|
final String? suffix;
|
||||||
|
final VoidCallback onTap;
|
||||||
|
final Color color;
|
||||||
|
const MenuItem({
|
||||||
|
Key? key,
|
||||||
|
required this.title,
|
||||||
|
this.icon,
|
||||||
|
this.suffix,
|
||||||
|
required this.onTap,
|
||||||
|
this.color = DesignConfig.darkPrimaryColor2,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: onTap,
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
if (icon != null) Icon(icon, size: 18, color: color),
|
||||||
|
if (icon != null) const SizedBox(width: 4),
|
||||||
|
DidvanText(title, color: color),
|
||||||
|
const Spacer(),
|
||||||
|
Icon(
|
||||||
|
DidvanIcons.angle_left_regular,
|
||||||
|
size: 18,
|
||||||
|
color: color,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,8 +2,8 @@ import 'package:didvan/config/design_config.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';
|
||||||
|
import 'package:didvan/pages/home/widgets/logo_app_bar.dart';
|
||||||
import 'package:didvan/widgets/didvan/text.dart';
|
import 'package:didvan/widgets/didvan/text.dart';
|
||||||
import 'package:didvan/widgets/logos/didvan_vertical_logo.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class Radar extends StatefulWidget {
|
class Radar extends StatefulWidget {
|
||||||
|
|
@ -29,7 +29,6 @@ class _RadarState extends State<Radar> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final d = MediaQuery.of(context);
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: Stack(
|
body: Stack(
|
||||||
children: [
|
children: [
|
||||||
|
|
@ -42,18 +41,7 @@ class _RadarState extends State<Radar> {
|
||||||
child: CustomScrollView(
|
child: CustomScrollView(
|
||||||
controller: _scrollController,
|
controller: _scrollController,
|
||||||
slivers: [
|
slivers: [
|
||||||
SliverPadding(
|
const SliverToBoxAdapter(child: LogoAppBar()),
|
||||||
padding: const EdgeInsets.all(
|
|
||||||
20,
|
|
||||||
).copyWith(top: d.padding.top + 20),
|
|
||||||
sliver: SliverToBoxAdapter(
|
|
||||||
child: Container(
|
|
||||||
alignment: Alignment.centerRight,
|
|
||||||
height: 76,
|
|
||||||
child: const DidvanHorizontalLogo(),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SliverPadding(
|
const SliverPadding(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 16),
|
padding: EdgeInsets.symmetric(horizontal: 16),
|
||||||
sliver: SliverToBoxAdapter(
|
sliver: SliverToBoxAdapter(
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ class _SearchFieldState extends State<SearchField> {
|
||||||
Radius.circular(4),
|
Radius.circular(4),
|
||||||
),
|
),
|
||||||
borderSide: BorderSide(
|
borderSide: BorderSide(
|
||||||
color: DesignConfig.greyColor4,
|
color: DesignConfig.borderColor,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
fillColor: Colors.red,
|
fillColor: Colors.red,
|
||||||
|
|
@ -62,10 +62,7 @@ class _SearchFieldState extends State<SearchField> {
|
||||||
),
|
),
|
||||||
border: InputBorder.none,
|
border: InputBorder.none,
|
||||||
hintText: 'جستجو مطلب در رادار',
|
hintText: 'جستجو مطلب در رادار',
|
||||||
hintStyle: Theme.of(context)
|
hintStyle: const TextStyle(color: DesignConfig.hintColor),
|
||||||
.textTheme
|
|
||||||
.subtitle2!
|
|
||||||
.copyWith(color: DesignConfig.greyColor5),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
import 'package:didvan/widgets/logos/didvan_vertical_logo.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class LogoAppBar extends StatelessWidget {
|
||||||
|
final bool hasExtraPadding;
|
||||||
|
const LogoAppBar({Key? key, this.hasExtraPadding = true}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final MediaQueryData d = MediaQuery.of(context);
|
||||||
|
final double extraPadding = hasExtraPadding ? 0 : 16;
|
||||||
|
return Container(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
left: 140 - extraPadding,
|
||||||
|
top: d.padding.top + 16 - extraPadding,
|
||||||
|
bottom: 16 - extraPadding,
|
||||||
|
right: 16 - extraPadding,
|
||||||
|
),
|
||||||
|
alignment: Alignment.centerRight,
|
||||||
|
child: const DidvanHorizontalLogo(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
import 'package:didvan/config/design_config.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class DidvanCard extends StatelessWidget {
|
||||||
|
final Widget child;
|
||||||
|
const DidvanCard({Key? key, required this.child}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
padding: const EdgeInsets.all(16),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: DesignConfig.lowBorderRadius,
|
||||||
|
color: Theme.of(context).colorScheme.surface,
|
||||||
|
border: DesignConfig.lightBorder,
|
||||||
|
),
|
||||||
|
child: child,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
import 'package:didvan/config/design_config.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class DidvanDivider extends StatelessWidget {
|
||||||
|
const DidvanDivider({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
height: 1,
|
||||||
|
width: double.infinity,
|
||||||
|
margin: const EdgeInsets.symmetric(vertical: 12),
|
||||||
|
color: DesignConfig.borderColor,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -12,7 +12,7 @@ class DidvanText extends StatelessWidget {
|
||||||
const DidvanText(
|
const DidvanText(
|
||||||
this.text, {
|
this.text, {
|
||||||
Key? key,
|
Key? key,
|
||||||
this.style = DesignConfig.body1Text,
|
this.style = DesignConfig.body2Text,
|
||||||
this.color,
|
this.color,
|
||||||
this.fontSize,
|
this.fontSize,
|
||||||
this.fontWeight,
|
this.fontWeight,
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
|
||||||
hintStyle: Theme.of(context)
|
hintStyle: Theme.of(context)
|
||||||
.textTheme
|
.textTheme
|
||||||
.bodyText1!
|
.bodyText1!
|
||||||
.copyWith(color: DesignConfig.greyColor5),
|
.copyWith(color: DesignConfig.hintColor),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -97,7 +97,7 @@ 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.greyColor4;
|
return DesignConfig.borderColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
Color _fillColor() {
|
Color _fillColor() {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
import 'package:didvan/config/design_config.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;
|
||||||
|
|
||||||
|
const ItemTitle({
|
||||||
|
Key? key,
|
||||||
|
required this.title,
|
||||||
|
this.icon,
|
||||||
|
this.color = DesignConfig.darkPrimaryColor2,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 16, bottom: 12),
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
if (icon != null) Icon(icon, color: color),
|
||||||
|
if (icon != null) const SizedBox(width: 4),
|
||||||
|
DidvanText(
|
||||||
|
title,
|
||||||
|
style: Theme.of(context).textTheme.subtitle1,
|
||||||
|
color: DesignConfig.darkPrimaryColor2,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue