mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 08:15:16 +00:00
Start to display user groups
This commit is contained in:
@ -2,6 +2,7 @@ import 'package:comunic/helpers/account_helper.dart';
|
||||
import 'package:comunic/ui/routes/app_settings_route.dart';
|
||||
import 'package:comunic/ui/screens/conversations_list_screen.dart';
|
||||
import 'package:comunic/ui/screens/friends_list_screen.dart';
|
||||
import 'package:comunic/ui/screens/groups_list_screen.dart';
|
||||
import 'package:comunic/ui/screens/newest_posts.dart';
|
||||
import 'package:comunic/ui/screens/notifications_screen.dart';
|
||||
import 'package:comunic/ui/widgets/navbar_widget.dart';
|
||||
@ -89,6 +90,9 @@ class _HomeRouteState extends State<HomeRoute> {
|
||||
case BarCallbackActions.OPEN_FRIENDS:
|
||||
return FriendsListScreen();
|
||||
|
||||
case BarCallbackActions.OPEN_GROUPS:
|
||||
return GroupsListScreen();
|
||||
|
||||
default:
|
||||
throw "Invalid tab : " + _currTab.toString();
|
||||
}
|
||||
|
84
lib/ui/screens/groups_list_screen.dart
Normal file
84
lib/ui/screens/groups_list_screen.dart
Normal file
@ -0,0 +1,84 @@
|
||||
import 'package:comunic/helpers/groups_helper.dart';
|
||||
import 'package:comunic/lists/groups_list.dart';
|
||||
import 'package:comunic/ui/widgets/group_icon_widget.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';
|
||||
|
||||
/// Groups list screen
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class GroupsListScreen extends StatefulWidget {
|
||||
@override
|
||||
_GroupsListScreenState createState() => _GroupsListScreenState();
|
||||
}
|
||||
|
||||
class _GroupsListScreenState extends SafeState<GroupsListScreen> {
|
||||
/// The list of groups
|
||||
GroupsList _groups;
|
||||
|
||||
bool _error = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
this._refreshList();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: <Widget>[
|
||||
// Error
|
||||
buildErrorCard(
|
||||
tr("Could not load the list of groups!"),
|
||||
hide: !_error,
|
||||
actions: [
|
||||
MaterialButton(
|
||||
child: Text(tr("Try again".toUpperCase())),
|
||||
onPressed: () => _refreshList(),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
// List of groups
|
||||
Expanded(
|
||||
child: RefreshIndicator(
|
||||
onRefresh: () => this._refreshList(),
|
||||
child: _groups == null
|
||||
? Container()
|
||||
: ListView(
|
||||
children: _groups.values
|
||||
.map((g) => ListTile(
|
||||
leading: GroupIcon(group: g),
|
||||
title: Text(g.displayName),
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
))
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
/// Refresh the list of groups
|
||||
Future<void> _refreshList() async {
|
||||
try {
|
||||
final list = await GroupsHelper().getListUser();
|
||||
final groups = await GroupsHelper().getListOrThrow(list, force: true);
|
||||
|
||||
setState(() {
|
||||
_groups = groups;
|
||||
_error = false;
|
||||
});
|
||||
} catch (e) {
|
||||
print(e);
|
||||
|
||||
setState(() {
|
||||
_error = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
50
lib/ui/widgets/group_icon_widget.dart
Normal file
50
lib/ui/widgets/group_icon_widget.dart
Normal file
@ -0,0 +1,50 @@
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:comunic/models/group.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Custom group icon
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
class GroupIcon extends StatelessWidget {
|
||||
final Group group;
|
||||
final double width;
|
||||
|
||||
const GroupIcon({
|
||||
Key key,
|
||||
@required this.group,
|
||||
this.width = 50,
|
||||
}) : assert(group != null),
|
||||
assert(width != null),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: group.iconURL,
|
||||
width: width,
|
||||
height: width,
|
||||
placeholder: (c, s) => Container(
|
||||
color: Colors.grey,
|
||||
width: width,
|
||||
height: width,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: CircularProgressIndicator(
|
||||
strokeWidth: 4.0,
|
||||
),
|
||||
),
|
||||
),
|
||||
errorWidget: (c, s, o) => Container(
|
||||
color: Colors.red,
|
||||
width: width,
|
||||
height: width,
|
||||
child: Icon(
|
||||
Icons.error,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -15,6 +15,7 @@ enum BarCallbackActions {
|
||||
OPEN_NEWEST_POSTS,
|
||||
OPEN_FRIENDS,
|
||||
OPEN_MY_PAGE,
|
||||
OPEN_GROUPS,
|
||||
OPEN_APP_SETTINGS,
|
||||
NONE,
|
||||
ACTION_LOGOUT
|
||||
@ -81,6 +82,7 @@ final _menuItems = <_MenuItem>[
|
||||
final _menuActionsItem = <_ActionMenuItem>[
|
||||
_ActionMenuItem(
|
||||
label: tr("My Page"), action: BarCallbackActions.OPEN_MY_PAGE),
|
||||
_ActionMenuItem(label: tr("Groups"), action: BarCallbackActions.OPEN_GROUPS),
|
||||
_ActionMenuItem(
|
||||
label: tr("App settings"), action: BarCallbackActions.OPEN_APP_SETTINGS),
|
||||
_ActionMenuItem(
|
||||
|
Reference in New Issue
Block a user