1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2025-06-19 08:15:16 +00:00

Create pick user dialog

This commit is contained in:
2020-05-02 15:30:19 +02:00
parent 1227ef283c
commit 804457c761
5 changed files with 153 additions and 15 deletions

View File

@ -0,0 +1,17 @@
import 'package:comunic/utils/intl_utils.dart';
import 'package:flutter/material.dart';
/// Render a cancel button for an alert dialog
///
/// @author Pierre HUBERT
class CancelDialogButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(tr("Cancel").toUpperCase()),
textColor: Colors.red,
);
}
}

View File

@ -0,0 +1,27 @@
import 'package:comunic/utils/intl_utils.dart';
import 'package:flutter/material.dart';
/// Confirm dialog button
///
/// @author Pierre HUBERT
class ConfirmDialogButton<T> extends StatelessWidget {
final bool enabled;
final T value;
const ConfirmDialogButton({
Key key,
this.enabled = true,
@required this.value,
}) : assert(enabled != null),
super(key: key);
@override
Widget build(BuildContext context) {
return MaterialButton(
onPressed: enabled ? () => Navigator.of(context).pop(value) : null,
child: Text(tr("Confirm").toUpperCase()),
textColor: Colors.green,
);
}
}

View File

@ -15,19 +15,21 @@ typedef OnSelectUserCallback = void Function(User);
class PickUserWidget extends StatefulWidget {
final OnSelectUserCallback onSelectUser;
final void Function(String) onValueChange;
final String label;
final bool resetOnChoose;
final bool keepFocusOnChoose;
final bool enabled;
const PickUserWidget(
{Key key,
@required this.onSelectUser,
@required this.label,
this.resetOnChoose = false,
this.keepFocusOnChoose = false,
this.enabled = true})
: assert(onSelectUser != null),
const PickUserWidget({
Key key,
@required this.onSelectUser,
@required this.label,
this.resetOnChoose = false,
this.keepFocusOnChoose = false,
this.onValueChange,
this.enabled = true,
}) : assert(onSelectUser != null),
assert(label != null),
assert(resetOnChoose != null),
assert(keepFocusOnChoose != null),
@ -93,9 +95,9 @@ class _PickUserWidgetState extends State<PickUserWidget> {
shrinkWrap: true,
itemCount: _suggestions == null ? 0 : _suggestions.length,
itemBuilder: (c, i) => SimpleUserTile(
user: _suggestions[i],
onTap: _userTapped,
),
user: _suggestions[i],
onTap: _userTapped,
),
),
),
);
@ -116,9 +118,11 @@ class _PickUserWidgetState extends State<PickUserWidget> {
/// This method get called each time the input value is updated
Future<void> _updateSuggestions() async {
if (_controller.value.text.length == 0) return _removeOverlay();
if (widget.onValueChange != null) widget.onValueChange(_controller.text);
final results = await _searchHelper.searchUser(_controller.value.text);
if (_controller.text.length == 0) return _removeOverlay();
final results = await _searchHelper.searchUser(_controller.text);
if (results == null) return;