1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-26 14:59:22 +00:00

Improve user access denied screen

This commit is contained in:
Pierre HUBERT 2020-05-16 09:46:38 +02:00
parent 736accaca4
commit 288cd492a2

View File

@ -5,8 +5,9 @@ import 'package:comunic/models/user.dart';
import 'package:comunic/ui/routes/main_route/main_route.dart'; import 'package:comunic/ui/routes/main_route/main_route.dart';
import 'package:comunic/ui/widgets/FrienshipStatusWidget.dart'; import 'package:comunic/ui/widgets/FrienshipStatusWidget.dart';
import 'package:comunic/ui/widgets/account_image_widget.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/intl_utils.dart';
import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/// User access denied screen /// User access denied screen
@ -24,27 +25,16 @@ class UserAccessDeniedScreen extends StatefulWidget {
_UserAccessDeniedScreenState createState() => _UserAccessDeniedScreenState(); _UserAccessDeniedScreenState createState() => _UserAccessDeniedScreenState();
} }
class _UserAccessDeniedScreenState extends State<UserAccessDeniedScreen> { class _UserAccessDeniedScreenState extends SafeState<UserAccessDeniedScreen> {
final UsersHelper usersHelper = UsersHelper(); final UsersHelper usersHelper = UsersHelper();
final FriendsHelper friendsHelper = FriendsHelper(); final FriendsHelper friendsHelper = FriendsHelper();
GlobalKey<RefreshIndicatorState> _refreshIndicatorKey = final _key = GlobalKey<AsyncScreenWidgetState>();
GlobalKey<RefreshIndicatorState>();
FriendStatus _status; FriendStatus _status;
User _user; User _user;
bool _error = false;
void setError(bool e) => setState(() => _error = e);
@override
void didChangeDependencies() {
super.didChangeDependencies();
refresh();
}
Future<void> refresh() async { Future<void> refresh() async {
try {
final status = await friendsHelper.getFriendshipStatus(widget.userID); final status = await friendsHelper.getFriendshipStatus(widget.userID);
final user = await usersHelper.getSingleWithThrow(widget.userID); final user = await usersHelper.getSingleWithThrow(widget.userID);
@ -55,47 +45,29 @@ class _UserAccessDeniedScreenState extends State<UserAccessDeniedScreen> {
controller.openUserPage(widget.userID); controller.openUserPage(widget.userID);
} }
setState(() {
_status = status; _status = status;
_user = user; _user = user;
});
} catch (e) {
setError(true);
}
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (!_error && _status == null) return buildLoadingPage(showAppBar: true); return AsyncScreenWidget(
key: _key,
return Scaffold( onReload: refresh,
appBar: AppBar( onBuild: _buildPage,
title: Text(_error ? "Error" : _user.displayName), errorMessage: tr("Could not load friendship information!"));
),
body: RefreshIndicator(
key: _refreshIndicatorKey,
onRefresh: refresh,
child: ListView.builder(
itemBuilder: (c, i) => _scrollBuild(),
itemCount: 1,
),
),
);
}
Widget _scrollBuild() {
if (_error) return _buildError();
return _buildPage();
}
Widget _buildError() {
return buildErrorCard("Could get information about your friendship!");
} }
Widget _buildPage() { Widget _buildPage() {
return Center( final size = MediaQuery.of(context).size;
return Container(
constraints: BoxConstraints.loose(size),
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
AccountImageWidget( AccountImageWidget(
user: _user, user: _user,
@ -108,10 +80,12 @@ class _UserAccessDeniedScreenState extends State<UserAccessDeniedScreen> {
Text(tr("This account is private.")), Text(tr("This account is private.")),
FriendshipStatusWidget( FriendshipStatusWidget(
status: _status, status: _status,
onFriendshipUpdated: () => _refreshIndicatorKey.currentState.show(), onFriendshipUpdated: () => _key.currentState.refresh(),
) )
], ],
), ),
),
),
); );
} }
} }