Skip to content

Commit d2f8129

Browse files
authored
State fixes (#5)
1 parent 6cb52a3 commit d2f8129

21 files changed

Lines changed: 297 additions & 134 deletions

assets/translations/uk.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@
130130
"error": "Помилка",
131131
"error_state_oops": "Ой \uD83D\uDE32",
132132
"error_state_title": "Щось пішло не так",
133-
"error_state_subtitle": "Ми працюємо над усуненням помили.\nБудь-ласка, спробуйте ще раз.",
133+
"error_state_subtitle": "Ми працюємо над усуненням помилки.\nБудь-ласка, спробуйте ще раз.",
134134
"error_state_retry": "Перезавантажити",
135135
"error_user_not_exist": "Користувача з таким ім'ям не існує.\nБудь-ласка, перевірте ім'я користувача!"
136136
}

lib/core/pop_controller.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class WillPopController {
2+
bool value;
3+
4+
WillPopController({this.value = false});
5+
}

lib/datasource/customer_auth_data_source.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,13 @@ class CustomerAuthDataSourceImpl extends CustomerAuthDataSource {
6969
.post(
7070
'wp/v2/users/lost-password',
7171
data: jsonEncode({
72-
'user_login': username
73-
})
72+
'user_login': username.toString(),
73+
}),
74+
options: Options(
75+
headers: {
76+
'Content-Type': 'application/json; charset=UTF-8',
77+
},
78+
),
7479
)
7580
.then((response) => WpRegResponse.fromJson(response.data));
7681

lib/screens/auth/login.dart

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,37 @@ import 'package:flutter/cupertino.dart';
44
import 'package:flutter/material.dart';
55
import 'package:wooapp/config/theme.dart';
66
import 'package:wooapp/datasource/customer_auth_data_source.dart';
7+
import 'package:wooapp/extensions/extensions_context.dart';
78
import 'package:wooapp/locator.dart';
89
import 'package:wooapp/screens/auth/register.dart';
910
import 'package:wooapp/screens/auth/reset.dart';
1011
import 'package:wooapp/widget/widget_dialog.dart';
12+
import 'package:wooapp/widget/widget_loader_full_screen.dart';
1113

1214
class LoginScreen extends StatefulWidget {
1315
@override
1416
State<StatefulWidget> createState() => _LoginScreenState();
1517
}
1618

1719
class _LoginScreenState extends State<LoginScreen> {
18-
1920
final CustomerAuthDataSource _ds = locator<CustomerAuthDataSource>();
2021

2122
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
2223

2324
final TextEditingController _lController = TextEditingController();
2425
final TextEditingController _pController = TextEditingController();
2526

27+
bool _loading = false;
28+
2629
@override
27-
Widget build(BuildContext context) => Scaffold(
30+
Widget build(BuildContext context) => Stack(
31+
children: [
32+
_buildAuthWidget(),
33+
if (_loading) WooFullScreenLoader(),
34+
],
35+
);
36+
37+
Widget _buildAuthWidget() => Scaffold(
2838
appBar: AppBar(
2939
elevation: 0,
3040
backgroundColor: WooAppTheme.colorAuthBackground,
@@ -249,20 +259,34 @@ class _LoginScreenState extends State<LoginScreen> {
249259
);
250260

251261
Future<void> auth() async {
262+
_onStartLoading();
252263
_ds.login(
253264
_lController.text.toString().trim(),
254265
_pController.text.toString()
255266
).then((data) {
267+
_onFinalizeLoading();
256268
Navigator.pop(context, true);
257269
}).catchError((error) {
270+
_onFinalizeLoading();
258271
if (error is DioError) {
259272
var message = error.response!.data['message'];
260-
showResult(tr('error'), message);
273+
_showResult(tr('error'), message);
261274
}
262275
});
263276
}
277+
278+
void _onStartLoading() {
279+
hideKeyboardForce(context);
280+
setState(() {
281+
_loading = true;
282+
});
283+
}
284+
285+
void _onFinalizeLoading() => setState(() {
286+
_loading = false;
287+
});
264288

265-
void showResult(String title, String desc) {
289+
void _showResult(String title, String desc) {
266290
showDialog(
267291
context: context,
268292
builder: (ctx) => WooDialog(

lib/screens/auth/register.dart

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import 'package:wooapp/locator.dart';
88
import 'package:wooapp/model/auth_register_response.dart';
99
import 'package:wooapp/widget/widget_dialog.dart';
1010
import 'package:validators/validators.dart';
11+
import 'package:wooapp/widget/widget_loader_full_screen.dart';
1112

1213
class RegisterScreen extends StatefulWidget {
1314
@override
1415
State<StatefulWidget> createState() => _RegisterScreenState();
1516
}
1617

1718
class _RegisterScreenState extends State<RegisterScreen> {
18-
1919
final CustomerAuthDataSource _ds = locator<CustomerAuthDataSource>();
2020

2121
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
@@ -25,8 +25,17 @@ class _RegisterScreenState extends State<RegisterScreen> {
2525
final TextEditingController _p1Controller = TextEditingController();
2626
final TextEditingController _p2Controller = TextEditingController();
2727

28+
bool _loading = false;
29+
2830
@override
29-
Widget build(BuildContext context) => Scaffold(
31+
Widget build(BuildContext context) => Stack(
32+
children: [
33+
_buildRegisterWidget(),
34+
if (_loading) WooFullScreenLoader(),
35+
],
36+
);
37+
38+
Widget _buildRegisterWidget() => Scaffold(
3039
appBar: AppBar(
3140
leading: BackButton(
3241
color: WooAppTheme.colorToolbarForeground,
@@ -320,22 +329,36 @@ class _RegisterScreenState extends State<RegisterScreen> {
320329
);
321330

322331
Future<void> _register() async {
332+
_onStartLoading();
323333
_ds.register(
324334
_lController.text.toString().trim(),
325335
_eController.text.toString().trim(),
326336
_p1Controller.text.toString()
327337
).then((register) {
338+
_onFinalizeLoading();
328339
Navigator.of(context).pop();
329-
showResult(tr('congratulations'), tr('sign_up_success'));
340+
_showResult(tr('congratulations'), tr('sign_up_success'));
330341
}).catchError((error) {
342+
_onFinalizeLoading();
331343
if (error is DioError) {
332344
var reg = WpRegResponse.fromJson(error.response!.data);
333-
showResult(tr('error'), reg.message);
345+
_showResult(tr('error'), reg.message);
334346
}
335347
});
336348
}
337349

338-
void showResult(String title, String desc) {
350+
void _onStartLoading() {
351+
hideKeyboardForce(context);
352+
setState(() {
353+
_loading = true;
354+
});
355+
}
356+
357+
void _onFinalizeLoading() => setState(() {
358+
_loading = false;
359+
});
360+
361+
void _showResult(String title, String desc) {
339362
showDialog(
340363
context: context,
341364
builder: (ctx) => WooDialog(

lib/screens/auth/reset.dart

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import 'package:easy_localization/easy_localization.dart';
22
import 'package:flutter/material.dart';
33
import 'package:wooapp/config/theme.dart';
44
import 'package:wooapp/datasource/customer_auth_data_source.dart';
5+
import 'package:wooapp/extensions/extensions_context.dart';
56
import 'package:wooapp/locator.dart';
67
import 'package:wooapp/widget/widget_dialog.dart';
8+
import 'package:wooapp/widget/widget_loader_full_screen.dart';
79

810
class PasswordRecoveryScreen extends StatefulWidget {
911
@override
@@ -17,8 +19,17 @@ class _PasswordRecoveryScreenState extends State<PasswordRecoveryScreen> {
1719

1820
final TextEditingController _lController = TextEditingController();
1921

22+
bool _loading = false;
23+
2024
@override
21-
Widget build(BuildContext context) => Scaffold(
25+
Widget build(BuildContext context) => Stack(
26+
children: [
27+
_buildResetWidget(),
28+
if (_loading) WooFullScreenLoader(),
29+
],
30+
);
31+
32+
Widget _buildResetWidget() => Scaffold(
2233
appBar: AppBar(
2334
leading: BackButton(
2435
color: WooAppTheme.colorToolbarForeground,
@@ -165,17 +176,31 @@ class _PasswordRecoveryScreenState extends State<PasswordRecoveryScreen> {
165176
);
166177

167178
Future<void> _reset() async {
179+
_onStartLoading();
168180
_ds.reset(
169181
_lController.text.toString().trim(),
170182
).then((register) {
183+
_onFinalizeLoading();
171184
Navigator.of(context).pop();
172-
showResult(tr('success'), tr('reset_success'));
185+
_showResult(tr('success'), tr('reset_success'));
173186
}).catchError((error) {
174-
showResult(tr('error'), tr('error_user_not_exist'));
187+
_onFinalizeLoading();
188+
_showResult(tr('error'), tr('error_user_not_exist'));
189+
});
190+
}
191+
192+
void _onStartLoading() {
193+
hideKeyboardForce(context);
194+
setState(() {
195+
_loading = true;
175196
});
176197
}
177198

178-
void showResult(String title, String desc) {
199+
void _onFinalizeLoading() => setState(() {
200+
_loading = false;
201+
});
202+
203+
void _showResult(String title, String desc) {
179204
showDialog(
180205
context: context,
181206
builder: (ctx) => WooDialog(

lib/screens/cart/cart_screen.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@ import 'package:wooapp/screens/cart/cart_view.dart';
66
class CartScreen extends StatelessWidget {
77
final CartCubit _cubit = CartCubit();
88
final VoidCallback shoppingCallback;
9-
final VoidCallback authCompleteCallback;
109

1110
CartScreen({
1211
required this.shoppingCallback,
13-
required this.authCompleteCallback,
1412
});
1513

1614
void refresh() {
@@ -22,7 +20,6 @@ class CartScreen extends StatelessWidget {
2220
create: (_) => _cubit,
2321
child: CartView(
2422
shoppingCallback: shoppingCallback,
25-
authCompleteCallback: authCompleteCallback,
2623
),
2724
);
2825

lib/screens/cart/cart_view.dart

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,9 @@ import 'package:wooapp/widget/widget_retry.dart';
2020

2121
class CartView extends StatelessWidget {
2222
final VoidCallback shoppingCallback;
23-
final VoidCallback authCompleteCallback;
2423

2524
CartView({
2625
required this.shoppingCallback,
27-
required this.authCompleteCallback,
2826
});
2927

3028
@override
@@ -67,7 +65,6 @@ class CartView extends StatelessWidget {
6765
Widget _noAuth(BuildContext context) => NoAuthScreen(
6866
title: tr('tab_cart'),
6967
onRefresh: () {
70-
authCompleteCallback();
7168
Future.delayed(Duration(milliseconds: 200), () {
7269
context.read<CartCubit>().getCart();
7370
});
@@ -273,16 +270,13 @@ class CartView extends StatelessWidget {
273270

274271
Widget _loadingState() => CartListShimmer();
275272

276-
Widget _errorState(BuildContext context) => SingleChildScrollView(
277-
child: Column(
278-
mainAxisAlignment: MainAxisAlignment.center,
279-
crossAxisAlignment: CrossAxisAlignment.center,
280-
children: [
281-
SizedBox(height: 40),
282-
ErrorRetryWidget(() => context.read<CartCubit>().getCart()),
283-
]
273+
Widget _errorState(BuildContext context) => Scaffold(
274+
body: SafeArea(
275+
child: ErrorRetryWidget(
276+
() => context.read<CartCubit>().getCart(),
277+
),
284278
),
285-
);
279+
);
286280

287281
AppBar _appBar() => AppBar(
288282
leading: Icon(

lib/screens/catalog/catalog_screen.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:wooapp/locator.dart';
1111
import 'package:wooapp/model/category.dart';
1212
import 'package:wooapp/screens/featured/featured_sort.dart';
1313
import 'package:wooapp/widget/widget_catalog_item.dart';
14+
import 'package:wooapp/widget/widget_retry.dart';
1415
import 'package:wooapp/widget/widget_sort.dart';
1516

1617
class CatalogScreen extends StatefulWidget {
@@ -60,6 +61,9 @@ class _CatalogScreenState extends State<CatalogScreen> {
6061
pagingController: _pagingController,
6162
builderDelegate: PagedChildBuilderDelegate<Category>(
6263
itemBuilder: (context, item, index) => CatalogItemWidget(item),
64+
firstPageErrorIndicatorBuilder: (_) => ErrorRetryWidget(() {
65+
_pagingController.refresh();
66+
}),
6367
),
6468
scrollDirection: Axis.vertical,
6569
),

lib/screens/featured/featured.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ class _FeaturedCategoriesViewState extends State<FeaturedCategoriesView> {
260260
builderDelegate: PagedChildBuilderDelegate<Category>(
261261
itemBuilder: (context, item, index) => FeaturedCategoryWidget(item),
262262
firstPageProgressIndicatorBuilder: (_) => FeaturedCategoriesShimmer(),
263-
firstPageErrorIndicatorBuilder: (_) => FeaturedCategoriesShimmer(),
263+
firstPageErrorIndicatorBuilder: (_) => Container(),
264264
),
265265
scrollDirection: Axis.horizontal,
266266
),

0 commit comments

Comments
 (0)