Skip to content

Commit e23fadc

Browse files
committed
clean code 3
1 parent 042c79b commit e23fadc

21 files changed

+791
-631
lines changed

lib/core/constants/icon_constants.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ class IconConstants {
1717
Icon get lock => const Icon(Icons.lock);
1818
Icon get person => const Icon(Icons.person);
1919
Icon get search => const Icon(Icons.search);
20+
Icon get language => const Icon(Icons.language);
21+
Icon get place => const Icon(Icons.place);
22+
Icon get description=> const Icon(Icons.description);
2023

2124

2225

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:stack_overflow_clone/core/base/base_singleton.dart';
3+
import 'package:stack_overflow_clone/core/extensions/ui_extensions.dart';
4+
5+
import '../../../uikit/decoration/special_container_decoration.dart';
6+
7+
class QuestionOrAnswerSection extends StatelessWidget with BaseSingleton {
8+
final String content;
9+
const QuestionOrAnswerSection({
10+
super.key,
11+
required this.content,
12+
});
13+
14+
@override
15+
Widget build(BuildContext context) {
16+
return Container(
17+
width: context.maxFinite,
18+
padding: context.padding2x,
19+
decoration: SpecialContainerDecoration(
20+
context: context,
21+
color: colors.grey3,
22+
),
23+
child: Text(content),
24+
);
25+
}
26+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:stack_overflow_clone/core/base/base_singleton.dart';
3+
import 'package:stack_overflow_clone/core/extensions/ui_extensions.dart';
4+
5+
class LikeAndUserInfo extends StatelessWidget with BaseSingleton {
6+
final VoidCallback onPressed;
7+
final Color likeColor;
8+
final String favLength;
9+
final String createdAt;
10+
final String username;
11+
const LikeAndUserInfo({
12+
super.key,
13+
required this.onPressed,
14+
required this.likeColor,
15+
required this.favLength,
16+
required this.createdAt,
17+
required this.username,
18+
});
19+
20+
@override
21+
Widget build(BuildContext context) {
22+
return Row(
23+
children: [
24+
Expanded(
25+
flex: 2,
26+
child: Row(
27+
children: [
28+
IconButton(
29+
onPressed: onPressed,
30+
icon: Icon(
31+
Icons.favorite,
32+
color: likeColor,
33+
),
34+
),
35+
context.emptySizedWidthBox2x,
36+
Expanded(
37+
child: Text(
38+
favLength,
39+
style: context.textTheme.subtitle1!.copyWith(
40+
fontWeight: context.fw700,
41+
),
42+
),
43+
),
44+
],
45+
),
46+
),
47+
Expanded(
48+
child: Wrap(
49+
children: [
50+
Column(
51+
crossAxisAlignment: context.crossAxisAStart,
52+
children: [
53+
Text(
54+
createdAt,
55+
style: context.textTheme.caption!
56+
.copyWith(color: colors.blue6),
57+
),
58+
Text(
59+
username,
60+
style: context.textTheme.caption!
61+
.copyWith(color: colors.blue8),
62+
),
63+
],
64+
)
65+
],
66+
),
67+
),
68+
],
69+
);
70+
}
71+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:stack_overflow_clone/core/base/base_singleton.dart';
3+
import 'package:stack_overflow_clone/core/extensions/ui_extensions.dart';
4+
import '../../../uikit/decoration/special_container_decoration.dart';
5+
6+
class ProfileItems extends StatelessWidget with BaseSingleton {
7+
final String title;
8+
final String action;
9+
final VoidCallback acitonOnTap;
10+
final String description;
11+
const ProfileItems({
12+
super.key,
13+
required this.title,
14+
required this.action,
15+
required this.acitonOnTap,
16+
required this.description,
17+
});
18+
19+
@override
20+
Widget build(BuildContext context) {
21+
return Column(
22+
children: [
23+
Row(
24+
mainAxisAlignment: context.mainAxisASpaceBetween,
25+
children: [
26+
Text(
27+
title,
28+
style: context.textTheme.headline6,
29+
),
30+
TextButton(
31+
onPressed: acitonOnTap,
32+
child: Text(
33+
action,
34+
style:
35+
context.textTheme.headline6!.copyWith(color: colors.blue),
36+
),
37+
)
38+
],
39+
),
40+
context.emptySizedHeightBox2x,
41+
Container(
42+
padding: context.padding4x,
43+
decoration: SpecialContainerDecoration(context: context),
44+
alignment: context.alignmentCenter,
45+
child: Text(
46+
description,
47+
),
48+
),
49+
],
50+
);
51+
}
52+
}

lib/products/components/textformfield/default_text_form_field.dart renamed to lib/features/components/textformfield/default_text_form_field.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
22

33
import '../../../core/theme/color/my_colors.dart';
4-
import '../../../features/components/textformfield/special_text_form_field.dart';
4+
import 'special_text_form_field.dart';
55

66
class DefaultTextFormField extends SpecialTextFormField {
77
DefaultTextFormField({

lib/products/models/question_model.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ class QuestionModel {
33
String? title;
44
String? subtitle;
55
String? createdAt;
6+
String? modifiedAt;
67
bool? isActive;
78
User? user;
89
List<Fav>? fav;
@@ -15,6 +16,7 @@ class QuestionModel {
1516
this.title,
1617
this.subtitle,
1718
this.createdAt,
19+
this.modifiedAt,
1820
this.isActive,
1921
this.user,
2022
this.fav,
@@ -27,6 +29,7 @@ class QuestionModel {
2729
title = json['title'];
2830
subtitle = json['subtitle'];
2931
createdAt = json['createdAt'];
32+
modifiedAt = json['modifiedAt'];
3033
isActive = json['isActive'];
3134
user = json['user'] != null ? User.fromJson(json['user']) : null;
3235
if (json['fav'] != null) {
@@ -51,6 +54,7 @@ class QuestionModel {
5154
data['title'] = title;
5255
data['subtitle'] = subtitle;
5356
data['createdAt'] = createdAt;
57+
data['modifiedAt'] = modifiedAt;
5458
data['isActive'] = isActive;
5559
if (user != null) {
5660
data['user'] = user!.toJson();

lib/products/viewmodels/user_view_model.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class UserViewModel extends ChangeNotifier with BaseSingleton {
1414
UserModel get user => _user;
1515
List<Question> _questionSearchList = [];
1616
List<Question> get questionSearchList => _questionSearchList;
17-
List<Answer> _answerSearchList = [];
17+
List<Answer> _answerSearchList = [];
1818
List<Answer> get answerSearchList => _answerSearchList;
1919

2020
final _api = Api();
@@ -39,13 +39,13 @@ class UserViewModel extends ChangeNotifier with BaseSingleton {
3939
}
4040
}
4141

42-
Future<void> get updateUser async {
42+
Future<void> updateUser({required Map<String, dynamic> obj}) async {
4343
String url = "/users/edit";
4444
final BuildContext context = _api.currentContext;
4545
final result = await _api.dioPost(
4646
url: url,
4747
post: false,
48-
obj: user.toJson(),
48+
obj: obj,
4949
);
5050
globals.getSnackBar(
5151
result: result,
@@ -71,7 +71,7 @@ class UserViewModel extends ChangeNotifier with BaseSingleton {
7171
notifyListeners();
7272
}
7373

74-
void searchAnswer(String query) {
74+
void searchAnswer(String query) {
7575
if (user.answer!.isNotEmpty && user.answer != null) {
7676
if (query.isNotEmpty) {
7777
final suggestions = user.answer!.where((question) {

lib/products/views/auth/forgot_password_view.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import 'package:flutter_svg/svg.dart';
66
import 'package:provider/provider.dart';
77
import 'package:stack_overflow_clone/core/base/base_singleton.dart';
88
import '../../../core/extensions/ui_extensions.dart';
9-
import '../../components/textformfield/default_text_form_field.dart';
9+
import '../../../features/components/textformfield/default_text_form_field.dart';
1010
import '../../../uikit/button/special_async_button.dart';
1111
import '../../../uikit/decoration/special_container_decoration.dart';
1212

lib/products/views/auth/login_view.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import '../../../uikit/button/special_async_button.dart';
99
import '../../../core/base/base_singleton.dart';
1010
import '../../../core/extensions/ui_extensions.dart';
1111
import '../../../uikit/decoration/special_container_decoration.dart';
12-
import '../../components/textformfield/default_text_form_field.dart';
12+
import '../../../features/components/textformfield/default_text_form_field.dart';
1313
import '../../viewmodels/login_view_model.dart';
1414
import 'forgot_password_view.dart';
1515
import 'register_view.dart';

lib/products/views/auth/register_view.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import '../../../core/base/base_singleton.dart';
88
import '../../../core/extensions/ui_extensions.dart';
99
import '../../../uikit/decoration/special_container_decoration.dart';
1010

11-
import '../../components/textformfield/default_text_form_field.dart';
11+
import '../../../features/components/textformfield/default_text_form_field.dart';
1212
import '../../viewmodels/register_view_model.dart';
1313

1414
class RegisterView extends StatelessWidget with BaseSingleton {

0 commit comments

Comments
 (0)