mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-22 04:49:21 +00:00
Can update following status of a group
This commit is contained in:
parent
566f205dc9
commit
add1712b7d
@ -148,6 +148,14 @@ class GroupsHelper {
|
||||
"accept": accept ? "true" : "false",
|
||||
});
|
||||
|
||||
/// Update group following status
|
||||
Future<bool> setFollowing(int groupID, bool follow) async =>
|
||||
(await (APIRequest(uri: "groups/set_following", needLogin: true)
|
||||
..addInt("groupID", groupID)
|
||||
..addBool("follow", follow))
|
||||
.exec())
|
||||
.isOK;
|
||||
|
||||
/// Get advanced information about the user
|
||||
Future<GetAdvancedInfoResult> getAdvancedInfo(int groupID) async {
|
||||
// Get advanced information about the user
|
||||
|
@ -29,7 +29,7 @@ class Group {
|
||||
final GroupRegistrationLevel registrationLevel;
|
||||
final GroupPostCreationLevel postCreationLevel;
|
||||
final String virtualDirectory;
|
||||
final bool following;
|
||||
bool following;
|
||||
|
||||
Group({
|
||||
@required this.id,
|
||||
@ -54,7 +54,7 @@ class Group {
|
||||
|
||||
get displayName => this.name;
|
||||
|
||||
bool get getIsAtLeastMember =>
|
||||
bool get isAtLeastMember =>
|
||||
membershipLevel == GroupMembershipLevel.ADMINISTRATOR ||
|
||||
membershipLevel == GroupMembershipLevel.MODERATOR ||
|
||||
membershipLevel == GroupMembershipLevel.MEMBER;
|
||||
|
@ -1,4 +1,5 @@
|
||||
import 'package:comunic/models/advanced_group_info.dart';
|
||||
import 'package:comunic/ui/widgets/group_following_widget.dart';
|
||||
import 'package:comunic/ui/widgets/group_icon_widget.dart';
|
||||
import 'package:comunic/ui/widgets/group_membership_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@ -50,9 +51,18 @@ class _AuthorizedGroupPageScreenState extends State<AuthorizedGroupPageScreen> {
|
||||
style: TextStyle(fontSize: 20),
|
||||
),
|
||||
Spacer(),
|
||||
GroupMembershipWidget(
|
||||
group: _group,
|
||||
onUpdated: () => widget.needRefresh(),
|
||||
Column(
|
||||
children: <Widget>[
|
||||
GroupMembershipWidget(
|
||||
group: _group,
|
||||
onUpdated: () => widget.needRefresh(),
|
||||
),
|
||||
Container(height: 10,),
|
||||
GroupFollowingWidget(
|
||||
group: _group,
|
||||
onUpdated: () => widget.needRefresh(),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
|
@ -95,7 +95,7 @@ class _GroupAccessDeniedScreenState extends SafeState<GroupAccessDeniedScreen> {
|
||||
// Get information about a single group
|
||||
final group = await GroupsHelper().getSingle(widget.groupID, force: true);
|
||||
|
||||
if (group.getIsAtLeastMember) widget.onMembershipAcquired();
|
||||
if (group.isAtLeastMember) widget.onMembershipAcquired();
|
||||
|
||||
setState(() => _group = group);
|
||||
} catch (e) {
|
||||
|
55
lib/ui/widgets/group_following_widget.dart
Normal file
55
lib/ui/widgets/group_following_widget.dart
Normal file
@ -0,0 +1,55 @@
|
||||
import 'package:comunic/helpers/groups_helper.dart';
|
||||
import 'package:comunic/models/group.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';
|
||||
|
||||
/// Group following status widget
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class GroupFollowingWidget extends StatefulWidget {
|
||||
final Group group;
|
||||
final Function() onUpdated;
|
||||
|
||||
const GroupFollowingWidget(
|
||||
{Key key, @required this.group, @required this.onUpdated})
|
||||
: assert(group != null),
|
||||
assert(onUpdated != null),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
_GroupFollowingWidgetState createState() => _GroupFollowingWidgetState();
|
||||
}
|
||||
|
||||
class _GroupFollowingWidgetState extends SafeState<GroupFollowingWidget> {
|
||||
Group get _group => widget.group;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (!_group.isAtLeastMember) return Container();
|
||||
|
||||
return InkWell(
|
||||
child: Text(
|
||||
_group.following ? tr("Following") : tr("Follow"),
|
||||
style: TextStyle(color: Colors.blue),
|
||||
),
|
||||
onTap: () => _toggleFollowing(),
|
||||
);
|
||||
}
|
||||
|
||||
/// Toggle following status
|
||||
void _toggleFollowing() async {
|
||||
if (!await GroupsHelper().setFollowing(_group.id, !_group.following)) {
|
||||
showSimpleSnack(context, tr("Could not update following status!"));
|
||||
return;
|
||||
}
|
||||
|
||||
setState(() {
|
||||
_group.following = !_group.following;
|
||||
|
||||
this.widget.onUpdated();
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user