Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 75df467

Browse files
authored
Merge pull request #4 from VB10/feature/extension
2 parents 7db6c1d + 97fba87 commit 75df467

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)

AltStyle によって変換されたページ (->オリジナル) /