Skip to content

Commit 97fba87

Browse files
committed
context extension and email extension added
1 parent 6189563 commit 97fba87

File tree

5 files changed

+86
-14
lines changed

5 files changed

+86
-14
lines changed

lib/core/constants/app/app_constants.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ class ApplicationConstants {
33
static const IPAD_NAME = "IPAD";
44

55
static const COMPANY_NAME = "HWA";
6+
7+
static const EMAIL_REGIEX = r"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}\$";
68
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'package:flutter/material.dart';
2+
3+
extension ContextExtension on BuildContext {
4+
MediaQueryData get mediaQuery => MediaQuery.of(this);
5+
}
6+
7+
extension MediaQueryExtension on BuildContext {
8+
double get height => mediaQuery.size.height;
9+
double get width => mediaQuery.size.width;
10+
11+
double get lowValue => height * 0.01;
12+
double get normalValue => height * 0.02;
13+
double get mediumValue => height * 0.04;
14+
double get highValue => height * 0.1;
15+
}
16+
17+
extension ThemeExtension on BuildContext {
18+
ThemeData get theme => Theme.of(this);
19+
TextTheme get textTheme => theme.textTheme;
20+
ColorScheme get colors => theme.colorScheme;
21+
}
22+
23+
extension PaddingExtension on BuildContext {
24+
EdgeInsets get paddingLow => EdgeInsets.all(lowValue);
25+
EdgeInsets get paddingNormal => EdgeInsets.all(normalValue);
26+
EdgeInsets get paddingMedium => EdgeInsets.all(mediumValue);
27+
EdgeInsets get paddingHigh => EdgeInsets.all(highValue);
28+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import 'package:easy_localization/easy_localization.dart';
2+
import 'package:fluttermvvmtemplate/core/constants/app/app_constants.dart';
23

34
extension StringLocalization on String {
45
String get locale => this.tr();
6+
7+
String get isValidEmail => this.contains(RegExp(ApplicationConstants.EMAIL_REGIEX)) ? null : "Email does not valid";
58
}

lib/view/authenticate/login/view/login_view.dart

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart';
3+
import 'package:fluttermvvmtemplate/core/extension/context_extension.dart';
34
import 'package:fluttermvvmtemplate/view/authenticate/login/viewmodel/login_view_model.dart';
45

56
class LoginView extends StatelessWidget {
@@ -10,7 +11,31 @@ class LoginView extends StatelessWidget {
1011
onModelReady: (model) {
1112
model.setContext(context);
1213
},
13-
onPageBuilder: (BuildContext context, LoginViewModel value) => Scaffold(),
14+
onPageBuilder: (BuildContext context, LoginViewModel value) => buildScaffold(context),
15+
);
16+
}
17+
18+
Scaffold buildScaffold(BuildContext context) => Scaffold(
19+
body: ListView(
20+
children: <Widget>[
21+
Container(
22+
padding: context.paddingLow,
23+
height: context.height * .4,
24+
color: context.colors.background,
25+
child: buildText(context),
26+
),
27+
Padding(
28+
padding: EdgeInsets.symmetric(horizontal: context.lowValue),
29+
child: Placeholder(),
30+
)
31+
],
32+
),
33+
);
34+
35+
Text buildText(BuildContext context) {
36+
return Text(
37+
"Hello",
38+
style: context.textTheme.subtitle1,
1439
);
1540
}
1641
}

lib/view/authenticate/test/view/test_view.dart

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,18 @@ class _TestsViewState extends BaseState<TestsView> {
3131
}
3232

3333
Widget get scaffoldBody => Scaffold(
34-
appBar: AppBar(
35-
leading: Text(LocaleManager.instance.getStringValue(PreferencesKeys.TOKEN)),
36-
title: textWelcomeWidget(),
37-
actions: [iconButtonChangeTheme()],
38-
),
34+
appBar: appBar(),
3935
floatingActionButton: floatingActionButtonNumberIncrement,
4036
body: textNumber,
4137
);
4238

43-
Text textWelcomeWidget() => Text(LocaleKeys.welcome.locale);
39+
AppBar appBar() {
40+
return AppBar(
41+
leading: Text(LocaleManager.instance.getStringValue(PreferencesKeys.TOKEN)),
42+
title: textWelcomeWidget(),
43+
actions: [iconButtonChangeTheme()],
44+
);
45+
}
4446

4547
IconButton iconButtonChangeTheme() {
4648
return IconButton(
@@ -50,17 +52,29 @@ class _TestsViewState extends BaseState<TestsView> {
5052
});
5153
}
5254

55+
Widget get textNumber {
56+
return Column(
57+
children: <Widget>[
58+
Observer(
59+
builder: (context) => Text(
60+
viewModel.number.toString(),
61+
),
62+
),
63+
],
64+
);
65+
}
66+
67+
Text textWelcomeWidget() => Text(LocaleKeys.welcome.locale);
68+
5369
FloatingActionButton get floatingActionButtonNumberIncrement {
5470
return FloatingActionButton(
5571
onPressed: () => viewModel.incrementNumber(),
5672
);
5773
}
74+
}
5875

59-
Widget get textNumber {
60-
return Observer(
61-
builder: (context) => Text(
62-
viewModel.number.toString(),
63-
),
64-
);
65-
}
76+
extension _FormArea on _TestsViewState {
77+
TextFormField get mailField => TextFormField(
78+
validator: (value) => value.isValidEmail,
79+
);
6680
}

0 commit comments

Comments
 (0)