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

Create new conversations

This commit is contained in:
2019-04-27 16:23:08 +02:00
parent 765ca82300
commit 852064e82d
7 changed files with 272 additions and 15 deletions

View File

@ -2,7 +2,6 @@ import 'package:comunic/helpers/search_helper.dart';
import 'package:comunic/lists/users_list.dart';
import 'package:comunic/models/user.dart';
import 'package:comunic/ui/tiles/simple_user_tile.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:flutter/material.dart';
/// Pick user widget
@ -16,9 +15,20 @@ typedef OnSelectUserCallback = void Function(User);
class PickUserWidget extends StatefulWidget {
final OnSelectUserCallback onSelectUser;
final String label;
final bool resetOnChoose;
final bool keepFocusOnChoose;
const PickUserWidget({Key key, @required this.onSelectUser})
const PickUserWidget(
{Key key,
@required this.onSelectUser,
@required this.label,
this.resetOnChoose = false,
this.keepFocusOnChoose = false})
: assert(onSelectUser != null),
assert(label != null),
assert(resetOnChoose != null),
assert(keepFocusOnChoose != null),
super(key: key);
@override
@ -42,8 +52,7 @@ class _PickUserWidgetState extends State<PickUserWidget> {
_focusNode.addListener(() {
if (_focusNode.hasFocus) {
//Check for focus
_overlayEntry = _createOverlayEntry();
Overlay.of(context).insert(_overlayEntry);
//_showOverlay();
} else {
//Remove overlay
_removeOverlay();
@ -57,7 +66,10 @@ class _PickUserWidgetState extends State<PickUserWidget> {
focusNode: _focusNode,
onChanged: (s) => _updateSuggestions(),
controller: _controller,
decoration: InputDecoration(labelText: tr("Select user")),
decoration: InputDecoration(
labelText: widget.label,
alignLabelWithHint: true,
),
);
}
@ -87,6 +99,11 @@ class _PickUserWidgetState extends State<PickUserWidget> {
});
}
void _showOverlay() {
_overlayEntry = _createOverlayEntry();
Overlay.of(context).insert(_overlayEntry);
}
void _removeOverlay() {
if (_overlayEntry != null) {
_overlayEntry.remove();
@ -96,22 +113,36 @@ 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;
if (_controller.value.text.length == 0) return _removeOverlay();
final results = await _searchHelper.searchUser(_controller.value.text);
if (results == null) return;
_suggestions = results;
if (_overlayEntry != null) _overlayEntry.markNeedsBuild();
if (_overlayEntry != null)
_overlayEntry.markNeedsBuild();
else
_showOverlay();
}
/// Method called each time a user is tapped (selected)
void _userTapped(User user) {
_controller.text = user.fullName;
// Hide overlay
_removeOverlay();
_focusNode.unfocus();
// Unfocus if required
if (!widget.keepFocusOnChoose) {
_focusNode.unfocus();
}
//Check if name has to remain in input
if (widget.resetOnChoose) {
_controller.text = "";
} else
_controller.text = user.fullName;
//Callback
widget.onSelectUser(user);
}
}