Add category, modlog, list of mods, and refine other stuff

This commit is contained in:
krawieck 2020-09-05 19:27:11 +02:00
parent be49e93b28
commit ff827e6126
1 changed files with 76 additions and 17 deletions

View File

@ -30,6 +30,18 @@ class CommunityPage extends HookWidget {
print('OPEN MORE MENU'); print('OPEN MORE MENU');
} }
void _goToUser(int id) {
print('GO TO USER $id');
}
void _goToModlog() {
print('GO TO MODLOG');
}
void _goToCategories() {
print('GO RO CATEGORIES');
}
CommunityPage({@required String communityName, @required this.instanceUrl}) CommunityPage({@required String communityName, @required this.instanceUrl})
: assert(communityName != null, instanceUrl != null), : assert(communityName != null, instanceUrl != null),
_fullCommunityFuture = _fullCommunityFuture =
@ -105,10 +117,12 @@ class CommunityPage extends HookWidget {
icon: Icon(Icons.more_vert), onPressed: _openMoreMenu), icon: Icon(Icons.more_vert), onPressed: _openMoreMenu),
], ],
flexibleSpace: FlexibleSpaceBar( flexibleSpace: FlexibleSpaceBar(
background: _CommunityOverview(community, background: _CommunityOverview(
instanceUrl: instanceUrl, community,
goToInstance: _goToInstance, instanceUrl: instanceUrl,
subscribe: _subscribe), goToInstance: _goToInstance,
subscribe: _subscribe,
),
), ),
), ),
SliverPersistentHeader( SliverPersistentHeader(
@ -142,8 +156,12 @@ class CommunityPage extends HookWidget {
], ],
), ),
_AboutSection( _AboutSection(
community: community, community: community,
moderators: fullCommunitySnap.data?.moderators), moderators: fullCommunitySnap.data?.moderators,
goToUser: _goToUser,
goToModlog: _goToModlog,
goToCategories: _goToCategories,
),
], ],
), ),
), ),
@ -350,10 +368,18 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
class _AboutSection extends StatelessWidget { class _AboutSection extends StatelessWidget {
final CommunityView community; final CommunityView community;
final List<CommunityModeratorView> moderators; final List<CommunityModeratorView> moderators;
final Function(int id) goToUser;
final Function() goToModlog;
final Function() goToCategories;
const _AboutSection( const _AboutSection({
{Key key, @required this.community, @required this.moderators}) Key key,
: super(key: key); @required this.community,
@required this.moderators,
@required this.goToUser,
@required this.goToModlog,
@required this.goToCategories,
}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -362,27 +388,60 @@ class _AboutSection extends StatelessWidget {
return ListView( return ListView(
padding: EdgeInsets.only(top: 20), padding: EdgeInsets.only(top: 20),
children: [ children: [
Padding( if (community.description != null) ...[
padding: const EdgeInsets.symmetric(horizontal: 15), Padding(
child: MarkdownText(community.description), padding: const EdgeInsets.symmetric(horizontal: 15),
), child: MarkdownText(community.description),
_Divider(), ),
_Divider(),
],
SizedBox( SizedBox(
height: 25, height: 25,
child: ListView( child: ListView(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
children: [ children: [
// TODO: consider using Chips
Padding( Padding(
padding: const EdgeInsets.only(left: 7), padding: const EdgeInsets.only(left: 7),
child: _Badge('X users online'), child: _Badge('X users online'),
), ),
_Badge('${community.numberOfSubscribers} subscribers'), _Badge(
_Badge('${community.numberOfPosts}'), '''${community.numberOfSubscribers} subscriber${pluralS(community.numberOfSubscribers)}'''),
_Badge('${community.numberOfComments} comments'), _Badge(
'''${community.numberOfPosts} post${pluralS(community.numberOfPosts)}'''),
_Badge(
'''${community.numberOfComments} comment${pluralS(community.numberOfComments)}'''),
], ],
), ),
), ),
_Divider(), _Divider(),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 0),
child: FlatButton(
child: Text('Category: ${community.categoryName}'),
onPressed: goToCategories,
),
),
_Divider(),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 15),
child: FlatButton(
child: Text('Modlog'),
onPressed: goToModlog,
),
),
_Divider(),
if (moderators != null && moderators.isNotEmpty) ...[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 15),
child: Text('Mods:', style: theme.textTheme.subtitle2),
),
for (final mod in moderators)
ListTile(
title: Text(mod.userPreferredUsername ?? '@${mod.userName}'),
onTap: () => goToUser(mod.id),
),
]
], ],
); );
} }