Skip to content

Commit 2ba5273

Browse files
committed
REVISION2: remove profile image upload feature and add a placeholder image
1 parent bb3ec80 commit 2ba5273

File tree

8 files changed

+92
-74
lines changed

8 files changed

+92
-74
lines changed
Loading

lib/controllers/user_controller.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Future<Either<CustomError, GymUser>> getUserData() async {
8282
gymEndDate: userData['gymEndDate'],
8383
numWorkoutDays: userData['numWorkoutDays'],
8484
subscribedWorkoutType: userData['subscribedWorkoutType'],
85-
profileImageUrl: userData['profileImageUrl'],
85+
profileImageUrl: profileImageUrl,
8686
phoneNumber: userData['phoneNumber'],
8787
createdAt: DateTime.fromMillisecondsSinceEpoch(
8888
(userData['createdAt'] as Timestamp).seconds * 1000),

lib/models/gym_user.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class GymUser {
1212
late String gymEndDate;
1313
late String numWorkoutDays;
1414
late String subscribedWorkoutType;
15+
1516
late String profileImageUrl;
1617
late String phoneNumber;
1718
late DateTime createdAt;
@@ -56,7 +57,7 @@ class GymUser {
5657
"gymEndDate": this.gymEndDate,
5758
"numWorkoutDays": this.numWorkoutDays,
5859
"subscribedWorkoutType": this.subscribedWorkoutType,
59-
"profileImageUrl": this.profileImageUrl,
60+
// "profileImageUrl": this.profileImageUrl,
6061
"phoneNumber": this.phoneNumber,
6162
"createdAt": this.createdAt,
6263
"paymentStatus": this.paymentStatus,

lib/providers/form_provider.dart

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ class FormProvider with ChangeNotifier {
1919
bool _hasPassRepassInputError = false;
2020
String _affiliationStatus = 'default';
2121
String? _selectedImagePicker;
22-
String? _profileImageUrl;
22+
// ****************************** * /
23+
// ! To be included in the next update
24+
// String? _profileImageUrl;
25+
// ****************************** * /
2326
String? _idImageUrl;
2427
String? _totalFeeAmount;
2528
String? _formType;
@@ -83,28 +86,34 @@ class FormProvider with ChangeNotifier {
8386
_formType = formType;
8487
notifyListeners();
8588
}
89+
8690
/// upload profile image to firebase storage
87-
/// get download url for the uploaded image
91+
/// get download url for the uploaded image
8892
/// return download url to be stored to cloud firestore
89-
/// profile_images -> bucket
90-
Future<Either<CustomError, String>> uploadProfileImage(
91-
String imageUrl, String imageName) async {
92-
try {
93-
File profileImage = File(imageUrl);
94-
Reference ref = storage.ref().child("profile_images/${imageName}");
95-
UploadTask uploadTask = ref.putFile(profileImage);
96-
final snapshot = await uploadTask.whenComplete(() => {});
97-
_profileImageUrl = await snapshot.ref.getDownloadURL();
98-
99-
notifyListeners();
100-
return right(_profileImageUrl!);
101-
} on FirebaseException catch (err) {
102-
return left(
103-
CustomError(errorTitle: "Storage error", errorBody: err.message!));
104-
} catch (err) {
105-
return left(CustomError(errorTitle: "Error", errorBody: err.toString()));
106-
}
107-
}
93+
/// profile_images -> bucket
94+
95+
// ****************************************************** */
96+
// ! To be included in the next update
97+
98+
// Future<Either<CustomError, String>> uploadProfileImage(
99+
// String imageUrl, String imageName) async {
100+
// try {
101+
// File profileImage = File(imageUrl);
102+
// Reference ref = storage.ref().child("profile_images/${imageName}");
103+
// UploadTask uploadTask = ref.putFile(profileImage);
104+
// final snapshot = await uploadTask.whenComplete(() => {});
105+
// _profileImageUrl = await snapshot.ref.getDownloadURL();
106+
107+
// notifyListeners();
108+
// return right(_profileImageUrl!);
109+
// } on FirebaseException catch (err) {
110+
// return left(
111+
// CustomError(errorTitle: "Storage error", errorBody: err.message!));
112+
// } catch (err) {
113+
// return left(CustomError(errorTitle: "Error", errorBody: err.toString()));
114+
// }
115+
// }
116+
// ****************************************************** */
108117

109118
/// upload insider id image to firebase storage insider_id/image_name
110119
/// get image download url to store it into cloud firestore
@@ -135,7 +144,10 @@ class FormProvider with ChangeNotifier {
135144
bool get isAuthenticating => _isAuthenticating;
136145
String get selectedWorkoutDays => _selectedWorkoutDays;
137146
String get preferedWorkoutType => _preferedWorkoutType!;
138-
String get profileImageUrl => _profileImageUrl!;
147+
// ****************************** * /
148+
// ! To be included in the next update
149+
// String get profileImageUrl => _profileImageUrl!;
150+
// ****************************** * /
139151
String? get dateInputErrorStr => _dateInputErrorStr;
140152
bool get hasPassRepassInputError => _hasPassRepassInputError;
141153
String get affiliationStatus => _affiliationStatus;

lib/providers/payment_upload_provider.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,8 @@ class PaymentUploadProvider with ChangeNotifier {
1111
notifyListeners();
1212
}
1313

14-
<<<<<<< HEAD
1514
void toggleIsLoading() {
1615
_isLoading = !_isLoading;
17-
=======
18-
/// show CPI once the user taps upload receipt btn
19-
void toggleIsLoading(bool value) {
20-
isLoading = value;
21-
>>>>>>> fe93576f329f4f3aa950b83f34fe6a48c11bf242
2216
notifyListeners();
2317
}
2418

lib/utils/constants.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,3 +275,5 @@ Future<Either<CustomError, List<Map<String, dynamic>>>> getPriceValue() async {
275275
final FirebaseAuth auth = FirebaseAuth.instance;
276276
final FirebaseFirestore db = FirebaseFirestore.instance;
277277
final FirebaseStorage storage = FirebaseStorage.instance;
278+
final String profileImageUrl =
279+
"https://firebasestorage.googleapis.com/v0/b/dbugym.appspot.com/o/profile_images%2Fnaruto_on_muscles.jpg?alt=media&token=3f0d674d-9c43-4025-89e3-c021b04f0cc9";

lib/views/widgets/signup_login_form.dart

Lines changed: 52 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:dbu_gym/models/gym_user.dart';
88
import 'package:dbu_gym/providers/form_provider.dart';
99
import 'package:dbu_gym/providers/image_provider.dart';
1010
import 'package:dbu_gym/utils/clear_form_inputs.dart';
11+
import 'package:dbu_gym/utils/constants.dart';
1112
import 'package:dbu_gym/views/pages/image_pick_selector.dart';
1213
import 'package:dbu_gym/views/widgets/date_picker_input.dart';
1314
import 'package:dbu_gym/views/widgets/signup_form_drop_down_btn.dart';
@@ -88,31 +89,34 @@ class _FormWidgetState extends State<FormWidget> {
8889
children: [
8990
CircleAvatar(
9091
radius: 36,
91-
backgroundImage: imageProvider.profileImagePath != null
92-
? FileImage(File(imageProvider.profileImagePath!))
93-
: null,
94-
child: imageProvider.profileImagePath == null
95-
? Icon(Icons.person, size: 48)
96-
: null,
97-
),
98-
GestureDetector(
99-
onTap: () {
100-
formProvider.setSelectedImagePicker("profilePicture");
101-
showModalBottomSheet(
102-
showDragHandle: true,
103-
constraints: BoxConstraints.tight(Size(
104-
MediaQuery.of(context).size.width,
105-
MediaQuery.of(context).size.height * 0.3)),
106-
context: context,
107-
builder: (context) => ImagePickSelector(),
108-
);
109-
},
110-
child: Icon(
111-
Icons.add,
112-
size: 30,
113-
color: Theme.of(context).colorScheme.primary,
92+
backgroundImage: AssetImage(
93+
"assets/images/profile_image/naruto_on_muscles.jpg",
11494
),
115-
)
95+
// child: imageProvider.profileImagePath == null
96+
// ? Icon(Icons.person, size: 48)
97+
// : null,
98+
),
99+
// ******************************************************** */
100+
// ! To be included in the next update
101+
// GestureDetector(
102+
// onTap: () {
103+
// formProvider.setSelectedImagePicker("profilePicture");
104+
// showModalBottomSheet(
105+
// showDragHandle: true,
106+
// constraints: BoxConstraints.tight(Size(
107+
// MediaQuery.of(context).size.width,
108+
// MediaQuery.of(context).size.height * 0.3)),
109+
// context: context,
110+
// builder: (context) => ImagePickSelector(),
111+
// );
112+
// },
113+
// child: Icon(
114+
// Icons.add,
115+
// size: 30,
116+
// color: Theme.of(context).colorScheme.primary,
117+
// ),
118+
// )
119+
// ******************************************************** */
116120
],
117121
),
118122
SizedBox(height: MediaQuery.of(context).size.height * 0.02),
@@ -439,35 +443,39 @@ class _FormWidgetState extends State<FormWidget> {
439443
endDate: _endDateController.text,
440444
context: context,
441445
);
442-
443-
if (imageProvider.profileImagePath == null) {
444-
// if the form is sign up form and user didn't provide profile image, show an error snackbar
445-
CustomError error = CustomError(
446-
errorTitle: "Error",
447-
errorBody: "Please provide a profile picture",
448-
);
449-
error.showError(context);
450-
}
446+
// ****************************** * /
447+
// ! To be included in the next update
448+
// if (imageProvider.profileImagePath == null) {
449+
// // if the form is sign up form and user didn't provide profile image, show an error snackbar
450+
// CustomError error = CustomError(
451+
// errorTitle: "Error",
452+
// errorBody: "Please provide a profile picture",
453+
// );
454+
// error.showError(context);
455+
// }
456+
// ****************************** * /
451457
// valid sign up inputs
452458
if (formProvider.signUpFormKey.currentState!.validate() &&
453459
!formProvider.hasPassRepassInputError &&
454460
!formProvider.hasDateInputError &&
455-
imageProvider.profileImagePath != null &&
456461
formProvider.affiliationStatusError == null) {
457462
formProvider.setIsAuthtentcating(true);
458463
// set image profile field from image provider
459464

460465
// catch is there is storage uploading error
461-
Either<CustomError, String> profileUploadRes =
462-
await formProvider.uploadProfileImage(
463-
imageProvider.profileImagePath!,
464-
imageProvider.profileImageName!,
465-
);
466-
// show error if profile upload returns an error
467-
profileUploadRes.fold((err) {
468-
err.showError(context);
469-
}, (r) => null);
466+
// ****************************** * /
467+
// ! To be included in the next update
468+
// Either<CustomError, String> profileUploadRes =
469+
// await formProvider.uploadProfileImage(
470+
// imageProvider.profileImagePath!,
471+
// imageProvider.profileImageName!,
472+
// );
470473

474+
// show error if profile upload returns an error
475+
// profileUploadRes.fold((err) {
476+
// err.showError(context);
477+
// }, (r) => null);
478+
// ****************************** * /
471479
if (formProvider.affiliationStatus == 'insider') {
472480
Either<CustomError, String> idImageRes =
473481
await formProvider.uploadIdImage(
@@ -490,7 +498,7 @@ class _FormWidgetState extends State<FormWidget> {
490498
numWorkoutDays: formProvider.selectedWorkoutDays,
491499
subscribedWorkoutType:
492500
formProvider.preferedWorkoutType,
493-
profileImageUrl: formProvider.profileImageUrl,
501+
profileImageUrl: profileImageUrl,
494502
phoneNumber: _phoneNumberController.text,
495503
createdAt: DateTime.now(),
496504
paymentHistory: [],

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ flutter:
8686
- assets/images/grid_images/exercise/
8787
- .env
8888
- assets/exercises/exercises.json
89+
- assets/images/profile_image/
8990
# To add assets to your application, add an assets section, like this:
9091
# assets:
9192
# - images/a_dot_burr.jpeg

0 commit comments

Comments
 (0)