import 'package:comunic/helpers/friends_helper.dart'; import 'package:comunic/helpers/users_helper.dart'; import 'package:comunic/models/friend_status.dart'; 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/utils/intl_utils.dart'; import 'package:comunic/utils/ui_utils.dart'; import 'package:flutter/material.dart'; /// User access denied screen /// /// @author Pierre HUBERT class UserAccessDeniedScreen extends StatefulWidget { final int userID; const UserAccessDeniedScreen({Key key, @required this.userID}) : assert(userID != null), super(key: key); @override _UserAccessDeniedScreenState createState() => _UserAccessDeniedScreenState(); } class _UserAccessDeniedScreenState extends State { final UsersHelper usersHelper = UsersHelper(); final FriendsHelper friendsHelper = FriendsHelper(); GlobalKey _refreshIndicatorKey = 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); // 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); } } @override Widget build(BuildContext context) { if (!_error && _status == null) return buildLoadingPage(showAppBar: true); 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 _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(), ) ], ), ); } }