1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-10-23 06:53:23 +00:00

Add more actions

This commit is contained in:
Pierre HUBERT 2020-05-16 17:21:33 +02:00
parent e7181c1f59
commit bf2ba03912
4 changed files with 105 additions and 22 deletions

View File

@ -162,6 +162,8 @@ class UsersHelper {
customEmojies: _parseCustomEmojies(data["customEmojis"]), customEmojies: _parseCustomEmojies(data["customEmojis"]),
publicNote: data["publicNote"], publicNote: data["publicNote"],
canPostTexts: data["can_post_texts"], canPostTexts: data["can_post_texts"],
isFriendsListPublic: data["friend_list_public"],
numberFriends: data["number_friends"],
likes: data["pageLikes"], likes: data["pageLikes"],
userLike: data["user_like_page"], userLike: data["user_like_page"],
); );

View File

@ -12,6 +12,8 @@ import 'package:meta/meta.dart';
class AdvancedUserInfo extends User implements LikeElement { class AdvancedUserInfo extends User implements LikeElement {
final String publicNote; final String publicNote;
final bool canPostTexts; final bool canPostTexts;
final bool isFriendsListPublic;
final int numberFriends;
bool userLike; bool userLike;
int likes; int likes;
@ -25,10 +27,14 @@ class AdvancedUserInfo extends User implements LikeElement {
@required CustomEmojiesList customEmojies, @required CustomEmojiesList customEmojies,
@required this.publicNote, @required this.publicNote,
@required this.canPostTexts, @required this.canPostTexts,
@required this.isFriendsListPublic,
@required this.numberFriends,
@required this.userLike, @required this.userLike,
@required this.likes, @required this.likes,
}) : assert(publicNote != null), }) : assert(publicNote != null),
assert(canPostTexts != null), assert(canPostTexts != null),
assert(isFriendsListPublic != null),
assert(numberFriends != null),
assert(userLike != null), assert(userLike != null),
assert(likes != null), assert(likes != null),
super( super(

View File

@ -1,9 +1,12 @@
import 'package:comunic/helpers/friends_helper.dart';
import 'package:comunic/helpers/users_helper.dart'; import 'package:comunic/helpers/users_helper.dart';
import 'package:comunic/models/advanced_user_info.dart'; import 'package:comunic/models/advanced_user_info.dart';
import 'package:comunic/models/friend_status.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/mobile_mode/user_page_mobile.dart'; import 'package:comunic/ui/widgets/mobile_mode/user_page_mobile.dart';
import 'package:comunic/ui/widgets/safe_state.dart'; import 'package:comunic/ui/widgets/safe_state.dart';
import 'package:comunic/ui/widgets/tablet_mode/user_page_tablet.dart'; import 'package:comunic/ui/widgets/tablet_mode/user_page_tablet.dart';
import 'package:comunic/utils/account_utils.dart';
import 'package:comunic/utils/intl_utils.dart'; import 'package:comunic/utils/intl_utils.dart';
import 'package:comunic/utils/ui_utils.dart'; import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -32,6 +35,7 @@ class _UserPageScreenState extends SafeState<UserPageScreen> {
// Objects members // Objects members
_PageStatus _status = _PageStatus.LOADING; _PageStatus _status = _PageStatus.LOADING;
AdvancedUserInfo _userInfo; AdvancedUserInfo _userInfo;
FriendStatus _frienshipStatus;
final _refreshIndicatorKey = GlobalKey<RefreshIndicatorState>(); final _refreshIndicatorKey = GlobalKey<RefreshIndicatorState>();
_setStatus(_PageStatus s) => setState(() => _status = s); _setStatus(_PageStatus s) => setState(() => _status = s);
@ -47,9 +51,13 @@ class _UserPageScreenState extends SafeState<UserPageScreen> {
try { try {
final user = await usersHelper.getAdvancedInfo(widget.userID); final user = await usersHelper.getAdvancedInfo(widget.userID);
final status = widget.userID == userID()
? null
: await FriendsHelper().getFriendshipStatus(widget.userID);
setState(() { setState(() {
_userInfo = user; _userInfo = user;
_frienshipStatus = status;
}); });
_setStatus(_PageStatus.READY); _setStatus(_PageStatus.READY);
@ -61,6 +69,9 @@ class _UserPageScreenState extends SafeState<UserPageScreen> {
controller.popPage(); controller.popPage();
controller.openUserAccessDeniedPage(widget.userID); controller.openUserAccessDeniedPage(widget.userID);
} }
} catch (e, s) {
print("Could not refresh user information! $e\n$s");
_setStatus(_PageStatus.ERROR);
} }
} }
@ -104,6 +115,7 @@ class _UserPageScreenState extends SafeState<UserPageScreen> {
? UserPageTablet( ? UserPageTablet(
userInfo: _userInfo, userInfo: _userInfo,
onNeedRefresh: () => _refreshIndicatorKey.currentState.show(), onNeedRefresh: () => _refreshIndicatorKey.currentState.show(),
friendshipStatus: _frienshipStatus,
) )
: UserMobilePage( : UserMobilePage(
userInfo: _userInfo, userInfo: _userInfo,

View File

@ -1,10 +1,15 @@
import 'package:comunic/enums/post_target.dart'; import 'package:comunic/enums/post_target.dart';
import 'package:comunic/helpers/posts_helper.dart'; import 'package:comunic/helpers/posts_helper.dart';
import 'package:comunic/models/advanced_user_info.dart'; import 'package:comunic/models/advanced_user_info.dart';
import 'package:comunic/models/friend_status.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/account_image_widget.dart';
import 'package:comunic/ui/widgets/like_widget.dart'; import 'package:comunic/ui/widgets/like_widget.dart';
import 'package:comunic/ui/widgets/post_create_form_widget.dart'; import 'package:comunic/ui/widgets/post_create_form_widget.dart';
import 'package:comunic/ui/widgets/posts_list_widget.dart'; import 'package:comunic/ui/widgets/posts_list_widget.dart';
import 'package:comunic/utils/account_utils.dart';
import 'package:comunic/utils/conversations_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
@ -14,11 +19,13 @@ import 'package:flutter/rendering.dart';
class UserPageTablet extends StatefulWidget { class UserPageTablet extends StatefulWidget {
final AdvancedUserInfo userInfo; final AdvancedUserInfo userInfo;
final FriendStatus friendshipStatus;
final void Function() onNeedRefresh; final void Function() onNeedRefresh;
const UserPageTablet({ const UserPageTablet({
Key key, Key key,
@required this.userInfo, @required this.userInfo,
@required this.friendshipStatus,
@required this.onNeedRefresh, @required this.onNeedRefresh,
}) : assert(userInfo != null), }) : assert(userInfo != null),
assert(onNeedRefresh != null), assert(onNeedRefresh != null),
@ -31,6 +38,8 @@ class UserPageTablet extends StatefulWidget {
class _UserPageTabletState extends State<UserPageTablet> { class _UserPageTabletState extends State<UserPageTablet> {
AdvancedUserInfo get _userInfo => widget.userInfo; AdvancedUserInfo get _userInfo => widget.userInfo;
bool get _isCurrentUser => _userInfo.id == userID();
@override @override
Widget build(BuildContext context) => Flex( Widget build(BuildContext context) => Flex(
direction: Axis.horizontal, direction: Axis.horizontal,
@ -44,6 +53,7 @@ class _UserPageTabletState extends State<UserPageTablet> {
Widget _buildLeftColumn() => Column( Widget _buildLeftColumn() => Column(
children: <Widget>[ children: <Widget>[
_buildMainCard(), _buildMainCard(),
_buildActionsCard(),
_buildAboutCard(), _buildAboutCard(),
], ],
); );
@ -66,11 +76,7 @@ class _UserPageTabletState extends State<UserPageTablet> {
); );
/// Main user information card /// Main user information card
Widget _buildMainCard() => ConstrainedBox( Widget _buildMainCard() => _LeftPaneContainer(
constraints: BoxConstraints(maxWidth: 200),
child: Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Center(child: AccountImageWidget(user: _userInfo, width: 75)), Center(child: AccountImageWidget(user: _userInfo, width: 75)),
@ -87,8 +93,46 @@ class _UserPageTabletState extends State<UserPageTablet> {
: null), : null),
_MainCardSpacer(visible: _userInfo.hasVirtualDirectory), _MainCardSpacer(visible: _userInfo.hasVirtualDirectory),
LikeWidget(likeElement: _userInfo), LikeWidget(likeElement: _userInfo),
_MainCardSpacer(visible: !_isCurrentUser),
_isCurrentUser
? Container()
: FriendshipStatusWidget(
status: widget.friendshipStatus,
onFriendshipUpdated: widget.onNeedRefresh,
)
], ],
), ),
);
/// Actions card
Widget _buildActionsCard() => _LeftPaneContainer(
child: ButtonTheme(
minWidth: 30,
padding: EdgeInsets.all(0),
child: Row(
children: <Widget>[
// Friends list of the user
_userInfo.isFriendsListPublic
? Expanded(
child: OutlineButton.icon(
onPressed: () => MainController.of(context)
.openUserFriendsList(_userInfo.id),
icon: Icon(Icons.group),
label: Text("${_userInfo.numberFriends}"),
),
)
: Container(),
// Private messages
!_isCurrentUser
? Expanded(
child: OutlineButton(
onPressed: () =>
openPrivateConversation(context, _userInfo.id),
child: Icon(Icons.message),
))
: Container(),
],
), ),
), ),
); );
@ -97,6 +141,25 @@ class _UserPageTabletState extends State<UserPageTablet> {
Widget _buildAboutCard() => Container(); Widget _buildAboutCard() => Container();
} }
class _LeftPaneContainer extends StatelessWidget {
final Widget child;
const _LeftPaneContainer({Key key, this.child}) : super(key: key);
@override
Widget build(BuildContext context) {
return ConstrainedBox(
constraints: BoxConstraints(maxWidth: 200),
child: Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: child,
),
),
);
}
}
class _MainCardSpacer extends StatelessWidget { class _MainCardSpacer extends StatelessWidget {
final bool visible; final bool visible;