1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-12-26 12:58:51 +00:00

Add about tab

This commit is contained in:
Pierre HUBERT 2021-03-16 19:01:50 +01:00
parent ed109d8c26
commit ca948e4b28
3 changed files with 105 additions and 0 deletions

View File

@ -45,4 +45,9 @@ class AdvancedGroupInfo extends Group implements LikeElement {
@override
LikesType likeType = LikesType.GROUP;
get hasURL => url != null && url.isNotEmpty && url != "null";
get hasDescription =>
description != null && description.isNotEmpty && description != "null";
}

View File

@ -1,5 +1,6 @@
import 'package:comunic/models/advanced_group_info.dart';
import 'package:comunic/ui/routes/main_route/main_route.dart';
import 'package:comunic/ui/screens/group_sections/about_group_section.dart';
import 'package:comunic/ui/screens/group_sections/group_members_screen.dart';
import 'package:comunic/ui/screens/group_sections/group_posts_section.dart';
import 'package:comunic/ui/screens/group_settings_screen.dart';
@ -51,6 +52,12 @@ class _AuthorizedGroupPageScreenState
widget: GroupPostsSection(group: _group),
label: tr("Posts"),
),
// About the group
_GroupPageTab(
widget: AboutGroupSection(group: _group),
label: tr("About"),
)
]..addAll(_group.isAtLeastModerator
? [
_GroupPageTab(

View File

@ -0,0 +1,93 @@
import 'package:comunic/models/advanced_group_info.dart';
import 'package:comunic/models/group.dart';
import 'package:comunic/utils/date_utils.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
/// About group section
///
/// @author Pierre Hubert
class AboutGroupSection extends StatelessWidget {
final AdvancedGroupInfo group;
const AboutGroupSection({
Key key,
@required this.group,
}) : assert(group != null),
super(key: key);
@override
Widget build(BuildContext context) => ListView(
children: [
// URL, if any
group.hasURL
? ListTile(
leading: Icon(Icons.link),
title: Text(tr("URL")),
subtitle: Text(group.url),
onTap: () => launch(group.url),
)
: Container(),
// Description, if any
group.hasDescription
? ListTile(
leading: Icon(Icons.note),
title: Text(tr("Description")),
subtitle: Text(group.description),
onTap: () => launch(group.description),
)
: Container(),
// Time create
ListTile(
leading: Icon(Icons.access_time),
title: Text("Created"),
subtitle: Text(diffTimeFromNowToStr(group.timeCreate)),
),
// Number of members
ListTile(
leading: Icon(Icons.group),
title: Text(tr("Members")),
subtitle: Text(
tr("%1% members", args: {"1": group.numberMembers.toString()})),
),
// Who can create posts
ListTile(
leading: Icon(Icons.add),
title: Text(tr("Who can create posts")),
subtitle: Text(
group.postCreationLevel == GroupPostCreationLevel.MEMBERS
? tr("Every members")
: tr("Only moderators and administrators")),
),
// Registration process
ListTile(
leading: Icon(Icons.login),
title: Text(tr("Registration process")),
subtitle: Text(group.registrationLevel ==
GroupRegistrationLevel.CLOSED
? tr("On invitation only")
: (group.registrationLevel == GroupRegistrationLevel.MODERATED
? tr("A moderator has to approve requests")
: tr("Anyone can join the group without approval"))),
),
// Group visibility
ListTile(
leading: Icon(Icons.remove_red_eye),
title: Text(tr("Visibility")),
subtitle: Text(group.visibilityLevel == GroupVisibilityLevel.SECRETE
? tr("Secrete group")
: (group.visibilityLevel == GroupVisibilityLevel.PRIVATE
? tr("Private group")
: tr("Open group"))),
),
],
);
}