relatica/lib/screens/group_create_screen.dart

76 wiersze
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import '../controls/padding.dart';
import '../controls/standard_appbar.dart';
import '../services/connections_manager.dart';
import '../utils/active_profile_selector.dart';
import '../utils/snackbar_builder.dart';
class GroupCreateScreen extends StatefulWidget {
const GroupCreateScreen({super.key});
@override
State<GroupCreateScreen> createState() => _GroupCreateScreenState();
}
class _GroupCreateScreenState extends State<GroupCreateScreen> {
final groupTextController = TextEditingController();
Future<void> createGroup(ConnectionsManager manager) async {
if (groupTextController.text.isEmpty) {
buildSnackbar(context, "Group name can't be empty");
return;
}
final result = await manager.createGroup(groupTextController.text);
if (context.mounted) {
result.match(
onSuccess: (_) => context.canPop() ? context.pop() : null,
onError: (error) {
buildSnackbar(context, 'Error trying to create new group: $error');
});
}
}
@override
Widget build(BuildContext context) {
final manager = context
.watch<ActiveProfileSelector<ConnectionsManager>>()
.activeEntry
.value;
return Scaffold(
appBar: StandardAppBar.build(
context,
'New group',
withHome: false,
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
TextFormField(
controller: groupTextController,
textCapitalization: TextCapitalization.sentences,
decoration: InputDecoration(
labelText: 'Group Name',
border: OutlineInputBorder(
borderSide: const BorderSide(),
borderRadius: BorderRadius.circular(5.0),
),
),
),
const VerticalPadding(),
ElevatedButton(
onPressed: () => createGroup(manager),
child: const Text('Create'),
),
],
),
),
);
}
}