From 288cd492a2407e99869043dca6fa094ad74ad79d Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Sat, 16 May 2020 09:46:38 +0200 Subject: [PATCH] Improve user access denied screen --- lib/ui/screens/user_access_denied_screen.dart | 118 +++++++----------- 1 file changed, 46 insertions(+), 72 deletions(-) diff --git a/lib/ui/screens/user_access_denied_screen.dart b/lib/ui/screens/user_access_denied_screen.dart index eb90aa8..78bf8aa 100644 --- a/lib/ui/screens/user_access_denied_screen.dart +++ b/lib/ui/screens/user_access_denied_screen.dart @@ -5,8 +5,9 @@ import 'package:comunic/models/user.dart'; import 'package:comunic/ui/routes/main_route/main_route.dart'; import 'package:comunic/ui/widgets/FrienshipStatusWidget.dart'; import 'package:comunic/ui/widgets/account_image_widget.dart'; +import 'package:comunic/ui/widgets/async_screen_widget.dart'; +import 'package:comunic/ui/widgets/safe_state.dart'; import 'package:comunic/utils/intl_utils.dart'; -import 'package:comunic/utils/ui_utils.dart'; import 'package:flutter/material.dart'; /// User access denied screen @@ -24,94 +25,67 @@ class UserAccessDeniedScreen extends StatefulWidget { _UserAccessDeniedScreenState createState() => _UserAccessDeniedScreenState(); } -class _UserAccessDeniedScreenState extends State { +class _UserAccessDeniedScreenState extends SafeState { final UsersHelper usersHelper = UsersHelper(); final FriendsHelper friendsHelper = FriendsHelper(); - GlobalKey _refreshIndicatorKey = - GlobalKey(); + final _key = GlobalKey(); FriendStatus _status; User _user; - bool _error = false; - - void setError(bool e) => setState(() => _error = e); - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - refresh(); - } Future refresh() async { - try { - final status = await friendsHelper.getFriendshipStatus(widget.userID); - final user = await usersHelper.getSingleWithThrow(widget.userID); + final status = await friendsHelper.getFriendshipStatus(widget.userID); + final user = await usersHelper.getSingleWithThrow(widget.userID); - // Check if the two users are friend now - if (status.areFriend) { - final controller = MainController.of(context); - controller.popPage(); - controller.openUserPage(widget.userID); - } - - setState(() { - _status = status; - _user = user; - }); - } catch (e) { - setError(true); + // Check if the two users are friend now + if (status.areFriend) { + final controller = MainController.of(context); + controller.popPage(); + controller.openUserPage(widget.userID); } + + _status = status; + _user = user; } @override Widget build(BuildContext context) { - if (!_error && _status == null) return buildLoadingPage(showAppBar: true); + return AsyncScreenWidget( + key: _key, + onReload: refresh, + onBuild: _buildPage, + errorMessage: tr("Could not load friendship information!")); + } - return Scaffold( - appBar: AppBar( - title: Text(_error ? "Error" : _user.displayName), - ), - body: RefreshIndicator( - key: _refreshIndicatorKey, - onRefresh: refresh, - child: ListView.builder( - itemBuilder: (c, i) => _scrollBuild(), - itemCount: 1, + Widget _buildPage() { + final size = MediaQuery.of(context).size; + return Container( + constraints: BoxConstraints.loose(size), + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + AccountImageWidget( + user: _user, + width: 75, + ), + Text( + _user.displayName, + style: TextStyle(fontSize: 25.0), + ), + Text(tr("This account is private.")), + FriendshipStatusWidget( + status: _status, + onFriendshipUpdated: () => _key.currentState.refresh(), + ) + ], + ), ), ), ); } - - Widget _scrollBuild() { - if (_error) return _buildError(); - - return _buildPage(); - } - - Widget _buildError() { - return buildErrorCard("Could get information about your friendship!"); - } - - Widget _buildPage() { - return Center( - child: Column( - children: [ - AccountImageWidget( - user: _user, - width: 75, - ), - Text( - _user.displayName, - style: TextStyle(fontSize: 25.0), - ), - Text(tr("This account is private.")), - FriendshipStatusWidget( - status: _status, - onFriendshipUpdated: () => _refreshIndicatorKey.currentState.show(), - ) - ], - ), - ); - } }