mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 00:05:16 +00:00
Create new conversations
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user