Skip to content

Commit fbc28f7

Browse files
committed
Buat UI tampilkan snackbar pada fitur login ketika gagal
1 parent daace56 commit fbc28f7

File tree

1 file changed

+37
-6
lines changed

1 file changed

+37
-6
lines changed

lib/main.dart

+37-6
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import 'package:flutter/foundation.dart';
77
import 'package:flutter/material.dart';
88
import 'package:google_fonts/google_fonts.dart';
99

10+
// https://github.com/FilledStacks/responsive_builder/blob/master/lib/src/sizing_information.dart#L85
11+
final _mobileExtraLarge = 480.0;
12+
1013
void main() async {
1114
WidgetsFlutterBinding.ensureInitialized();
1215
await Firebase.initializeApp();
@@ -98,7 +101,7 @@ class _LoginPageState extends State<LoginPage> {
98101
return Center(
99102
child: Container(
100103
padding: EdgeInsets.symmetric(horizontal: 16),
101-
width: widthScreen > 480 ? 480 : double.infinity,
104+
width: widthScreen > _mobileExtraLarge ? _mobileExtraLarge : double.infinity,
102105
child: Column(
103106
mainAxisAlignment: MainAxisAlignment.center,
104107
children: [
@@ -137,7 +140,12 @@ class _LoginPageState extends State<LoginPage> {
137140
),
138141
keyboardType: TextInputType.emailAddress,
139142
validator: (value) {
140-
return value == null || value.isEmpty ? 'Enter an email address' : null;
143+
if (value == null || value.isEmpty) {
144+
return 'Enter an email address';
145+
} else {
146+
final isEmailValid = RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(value);
147+
return isEmailValid ? null : 'Invalid email';
148+
}
141149
},
142150
textInputAction: TextInputAction.next,
143151
),
@@ -276,15 +284,16 @@ class _LoginPageState extends State<LoginPage> {
276284
(_) => false,
277285
);
278286
} on FirebaseAuthException catch (error) {
279-
// TODO: buat UI pesan error gagal login
280287
final errorCode = error.code;
288+
var errorMessage = '';
281289
if (errorCode == 'user-not-found') {
282-
debugPrint('No user found for that email.');
290+
errorMessage = 'No user found for that email.';
283291
} else if (errorCode == 'wrong-password') {
284-
debugPrint('Wrong password provided for that user.');
292+
errorMessage = 'Wrong password provided for that user.';
285293
} else {
286-
debugPrint('error: ${error.toString()}');
294+
errorMessage = '$error';
287295
}
296+
_showSnackBar(context, errorMessage, widthScreen);
288297
setState(() => isLoading = false);
289298
}
290299
}
@@ -439,3 +448,25 @@ EdgeInsets _setPaddingButton() {
439448
}
440449
return padding;
441450
}
451+
452+
void _showSnackBar(BuildContext context, String message, double widthScreen) {
453+
if (widthScreen > _mobileExtraLarge) {
454+
ScaffoldMessenger.of(context).showSnackBar(
455+
SnackBar(
456+
content: Text(
457+
message,
458+
),
459+
behavior: SnackBarBehavior.floating,
460+
width: _mobileExtraLarge,
461+
),
462+
);
463+
} else {
464+
ScaffoldMessenger.of(context).showSnackBar(
465+
SnackBar(
466+
content: Text(
467+
message,
468+
),
469+
),
470+
);
471+
}
472+
}

0 commit comments

Comments
 (0)