mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 08:15:16 +00:00
Start to build groups page
This commit is contained in:
106
lib/ui/screens/group_access_denied_screen.dart
Normal file
106
lib/ui/screens/group_access_denied_screen.dart
Normal file
@ -0,0 +1,106 @@
|
||||
import 'package:comunic/helpers/groups_helper.dart';
|
||||
import 'package:comunic/models/group.dart';
|
||||
import 'package:comunic/ui/widgets/group_icon_widget.dart';
|
||||
import 'package:comunic/ui/widgets/group_membership_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';
|
||||
|
||||
/// Group access denied screen
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class GroupAccessDeniedScreen extends StatefulWidget {
|
||||
final int groupID;
|
||||
final Function() onMembershipAcquired;
|
||||
|
||||
const GroupAccessDeniedScreen({
|
||||
Key key,
|
||||
@required this.groupID,
|
||||
@required this.onMembershipAcquired,
|
||||
}) : assert(groupID != null),
|
||||
assert(onMembershipAcquired != null),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
_GroupAccessDeniedScreenState createState() =>
|
||||
_GroupAccessDeniedScreenState();
|
||||
}
|
||||
|
||||
class _GroupAccessDeniedScreenState extends SafeState<GroupAccessDeniedScreen> {
|
||||
Group _group;
|
||||
|
||||
bool error = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_refresh();
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (error)
|
||||
return buildErrorCard(tr("Could not get basic group information!"),
|
||||
actions: [
|
||||
MaterialButton(
|
||||
child: Text(tr("Try again").toUpperCase()),
|
||||
onPressed: () => this._refresh(),
|
||||
)
|
||||
]);
|
||||
|
||||
if (_group == null) return buildCenteredProgressBar();
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Spacer(
|
||||
flex: 5,
|
||||
),
|
||||
GroupIcon(group: _group),
|
||||
Spacer(),
|
||||
Text(
|
||||
_group.displayName,
|
||||
style: TextStyle(fontSize: 20),
|
||||
),
|
||||
Spacer(),
|
||||
Text(tr("A registration is required to access this group page.")),
|
||||
Spacer(),
|
||||
GroupMembershipWidget(
|
||||
group: _group,
|
||||
onUpdated: () => this._refresh(),
|
||||
onError: () => this._refresh(),
|
||||
),
|
||||
Spacer(
|
||||
flex: 5,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// Get basic information about the groups
|
||||
Future<void> _refresh() async {
|
||||
try {
|
||||
setState(() {
|
||||
error = false;
|
||||
_group = null;
|
||||
});
|
||||
|
||||
// Get information about a single group
|
||||
final group = await GroupsHelper().getSingle(widget.groupID, force: true);
|
||||
|
||||
if (group.getIsAtLeastMember) widget.onMembershipAcquired();
|
||||
|
||||
setState(() => _group = group);
|
||||
} catch (e) {
|
||||
print(e);
|
||||
setState(() => error = true);
|
||||
}
|
||||
}
|
||||
}
|
80
lib/ui/screens/group_screen.dart
Normal file
80
lib/ui/screens/group_screen.dart
Normal file
@ -0,0 +1,80 @@
|
||||
import 'package:comunic/helpers/groups_helper.dart';
|
||||
import 'package:comunic/ui/screens/group_access_denied_screen.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 screen
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class GroupPageScreen extends StatefulWidget {
|
||||
final int groupID;
|
||||
|
||||
const GroupPageScreen({Key key, @required this.groupID})
|
||||
: assert(groupID != null),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
_GroupPageScreenState createState() => _GroupPageScreenState();
|
||||
}
|
||||
|
||||
class _GroupPageScreenState extends SafeState<GroupPageScreen> {
|
||||
int get groupID => widget.groupID;
|
||||
|
||||
GetAdvancedInfoResult _getGroupResult;
|
||||
var error = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_refreshPage();
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (error)
|
||||
return buildErrorCard(tr("Could not load information about the group!"),
|
||||
actions: [
|
||||
MaterialButton(
|
||||
onPressed: () => _refreshPage(),
|
||||
child: Text(tr("Try again").toUpperCase()),
|
||||
)
|
||||
]);
|
||||
|
||||
// If we are still loading the page
|
||||
if (_getGroupResult == null) return buildCenteredProgressBar();
|
||||
|
||||
// Check if access to the group was denied
|
||||
if (_getGroupResult.status == GetAdvancedInfoStatus.ACCESS_DENIED)
|
||||
return GroupAccessDeniedScreen(
|
||||
groupID: groupID,
|
||||
onMembershipAcquired: () => _refreshPage(),
|
||||
);
|
||||
|
||||
// Create another screen for the group page
|
||||
}
|
||||
|
||||
/// Refresh the page
|
||||
Future<void> _refreshPage() async {
|
||||
try {
|
||||
setState(() {
|
||||
error = false;
|
||||
_getGroupResult = null;
|
||||
});
|
||||
|
||||
// Get information about the group
|
||||
final result = await GroupsHelper().getAdvancedInfo(groupID);
|
||||
|
||||
setState(() {
|
||||
_getGroupResult = result;
|
||||
});
|
||||
} catch (e) {
|
||||
print(e);
|
||||
setState(() {
|
||||
error = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
import 'package:comunic/helpers/groups_helper.dart';
|
||||
import 'package:comunic/lists/groups_list.dart';
|
||||
import 'package:comunic/models/group.dart';
|
||||
import 'package:comunic/ui/routes/home_route.dart';
|
||||
import 'package:comunic/ui/widgets/group_icon_widget.dart';
|
||||
import 'package:comunic/ui/widgets/group_membership_widget.dart';
|
||||
import 'package:comunic/ui/widgets/safe_state.dart';
|
||||
@ -40,7 +41,7 @@ class _GroupsListScreenState extends SafeState<GroupsListScreen> {
|
||||
hide: !_error,
|
||||
actions: [
|
||||
MaterialButton(
|
||||
child: Text(tr("Try again".toUpperCase())),
|
||||
child: Text(tr("Try again").toUpperCase()),
|
||||
onPressed: () => _refreshList(),
|
||||
),
|
||||
],
|
||||
@ -66,6 +67,7 @@ class _GroupsListScreenState extends SafeState<GroupsListScreen> {
|
||||
trailing: IconButton(
|
||||
icon: Icon(Icons.delete),
|
||||
onPressed: () => _deleteGroup(g)),
|
||||
onTap: () => HomeRoute.of(context).openGroup(g.id),
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
|
Reference in New Issue
Block a user