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/user_page_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 route /// /// @author Pierre HUBERT class UserAccessDeniedRoute extends StatefulWidget { final int userID; const UserAccessDeniedRoute({Key key, @required this.userID}) : assert(userID != null), super(key: key); @override _UserAccessDeniedRouteState createState() => _UserAccessDeniedRouteState(); } class _UserAccessDeniedRouteState 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) Navigator.of(context).pushReplacement( MaterialPageRoute( builder: (c) => UserPageRoute( userID: 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(), ) ], ), ); } }