mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-22 12:59:21 +00:00
Can create a group
This commit is contained in:
parent
a48e7f57a6
commit
d4a39a3527
@ -126,6 +126,17 @@ class GroupsHelper {
|
||||
.map((f) => cast<int>(f))
|
||||
.toSet();
|
||||
|
||||
/// Create a new group
|
||||
///
|
||||
/// Throws in case of failure
|
||||
static Future<int> create(String name) async {
|
||||
final result = await APIRequest.withLogin("groups/create")
|
||||
.addString("name", name)
|
||||
.execWithThrow();
|
||||
|
||||
return result.getObject()["id"];
|
||||
}
|
||||
|
||||
/// Perform a simple membership request
|
||||
Future<bool> _simpleMembershipRequest(int groupID, String uri,
|
||||
{Map<String, String> args}) async =>
|
||||
|
@ -54,28 +54,38 @@ class _GroupsListScreenState extends SafeState<GroupsListScreen> {
|
||||
onRefresh: () => this._refreshList(),
|
||||
child: _groups == null
|
||||
? Container()
|
||||
: ListView(
|
||||
children: _groups.values
|
||||
.map((g) => ListTile(
|
||||
leading: GroupIcon(group: g),
|
||||
title: Text(g.displayName),
|
||||
subtitle: GroupMembershipWidget(
|
||||
group: g,
|
||||
onUpdated: () =>
|
||||
_refreshIndicatorKey.currentState.show(),
|
||||
),
|
||||
trailing: IconButton(
|
||||
icon: Icon(Icons.delete),
|
||||
onPressed: () => _deleteGroup(g)),
|
||||
onTap: () => MainController.of(context).openGroup(g.id),
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
: Stack(children: [_buildGroupsList(), _buildCreateButton()]),
|
||||
))
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildGroupsList() => ListView(
|
||||
children: _groups.values
|
||||
.map((g) => ListTile(
|
||||
leading: GroupIcon(group: g),
|
||||
title: Text(g.displayName),
|
||||
subtitle: GroupMembershipWidget(
|
||||
group: g,
|
||||
onUpdated: () => _refreshIndicatorKey.currentState.show(),
|
||||
),
|
||||
trailing: IconButton(
|
||||
icon: Icon(Icons.delete),
|
||||
onPressed: () => _deleteGroup(g)),
|
||||
onTap: () => MainController.of(context).openGroup(g.id),
|
||||
))
|
||||
.toList(),
|
||||
);
|
||||
|
||||
Widget _buildCreateButton() => Positioned(
|
||||
right: 15,
|
||||
bottom: 15,
|
||||
child: FloatingActionButton(
|
||||
child: Icon(Icons.add),
|
||||
onPressed: _createGroup,
|
||||
),
|
||||
);
|
||||
|
||||
/// Refresh the list of groups
|
||||
Future<void> _refreshList() async {
|
||||
try {
|
||||
@ -109,4 +119,27 @@ class _GroupsListScreenState extends SafeState<GroupsListScreen> {
|
||||
// Refresh the list of groups
|
||||
_refreshIndicatorKey.currentState.show();
|
||||
}
|
||||
|
||||
/// Add a group
|
||||
void _createGroup() async {
|
||||
try {
|
||||
final name = await askUserString(
|
||||
context: context,
|
||||
title: tr("Group name"),
|
||||
message: tr("Name of the group to create"),
|
||||
defaultValue: "",
|
||||
hint: tr("Name of the group"),
|
||||
maxLength: 50,
|
||||
);
|
||||
|
||||
if (name == null) return;
|
||||
|
||||
final groupID = await GroupsHelper.create(name);
|
||||
|
||||
MainController.of(context).openGroup(groupID);
|
||||
} catch (e, s) {
|
||||
print("Could not create a new group! $e\n$s");
|
||||
showSimpleSnack(context, tr("Could not create a new group!"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:comunic/helpers/preferences_helper.dart';
|
||||
import 'package:comunic/ui/routes/full_screen_image.dart';
|
||||
import 'package:comunic/ui/widgets/dialogs/auto_sized_dialog_content_widget.dart';
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:html/parser.dart';
|
||||
@ -86,12 +87,14 @@ Future<String> askUserString({
|
||||
@required String message,
|
||||
@required String defaultValue,
|
||||
@required String hint,
|
||||
int maxLength = 200,
|
||||
}) async {
|
||||
assert(context != null);
|
||||
assert(title != null);
|
||||
assert(message != null);
|
||||
assert(defaultValue != null);
|
||||
assert(hint != null);
|
||||
assert(maxLength != null);
|
||||
|
||||
TextEditingController controller = TextEditingController(text: defaultValue);
|
||||
|
||||
@ -99,24 +102,21 @@ Future<String> askUserString({
|
||||
context: context,
|
||||
builder: (c) => AlertDialog(
|
||||
title: Text(title),
|
||||
content: Container(
|
||||
height: MediaQuery.of(context).size.height - 50,
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Text(message),
|
||||
TextField(
|
||||
controller: controller,
|
||||
maxLines: null,
|
||||
maxLength: 200,
|
||||
keyboardType: TextInputType.text,
|
||||
decoration: InputDecoration(
|
||||
labelText: hint,
|
||||
alignLabelWithHint: true,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
content: AutoSizeDialogContentWidget(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Text(message),
|
||||
TextField(
|
||||
controller: controller,
|
||||
maxLines: null,
|
||||
maxLength: maxLength,
|
||||
keyboardType: TextInputType.text,
|
||||
decoration: InputDecoration(
|
||||
labelText: hint,
|
||||
alignLabelWithHint: true,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: <Widget>[
|
||||
|
Loading…
Reference in New Issue
Block a user