From ca948e4b288e19f189fc7a2b9fa72a466dba1ad7 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Tue, 16 Mar 2021 19:01:50 +0100 Subject: [PATCH] Add about tab --- lib/models/advanced_group_info.dart | 5 + .../screens/authorized_group_page_screen.dart | 7 ++ .../group_sections/about_group_section.dart | 93 +++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 lib/ui/screens/group_sections/about_group_section.dart diff --git a/lib/models/advanced_group_info.dart b/lib/models/advanced_group_info.dart index 2eacca2..d1adb7b 100644 --- a/lib/models/advanced_group_info.dart +++ b/lib/models/advanced_group_info.dart @@ -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"; } diff --git a/lib/ui/screens/authorized_group_page_screen.dart b/lib/ui/screens/authorized_group_page_screen.dart index 3906775..0233acf 100644 --- a/lib/ui/screens/authorized_group_page_screen.dart +++ b/lib/ui/screens/authorized_group_page_screen.dart @@ -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( diff --git a/lib/ui/screens/group_sections/about_group_section.dart b/lib/ui/screens/group_sections/about_group_section.dart new file mode 100644 index 0000000..9b7002b --- /dev/null +++ b/lib/ui/screens/group_sections/about_group_section.dart @@ -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"))), + ), + ], + ); +}