mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2024-11-27 23:09:35 +01:00
fix: Multiline keyboard on web and desktop
This commit is contained in:
parent
e300048d3b
commit
f9bec90f3d
@ -668,11 +668,9 @@ class ChatView extends StatelessWidget {
|
|||||||
child: InputBar(
|
child: InputBar(
|
||||||
room: controller.room,
|
room: controller.room,
|
||||||
minLines: 1,
|
minLines: 1,
|
||||||
maxLines: kIsWeb ? 1 : 8,
|
maxLines: 8,
|
||||||
autofocus: !PlatformInfos.isMobile,
|
autofocus: !PlatformInfos.isMobile,
|
||||||
keyboardType: !PlatformInfos.isMobile
|
keyboardType: TextInputType.multiline,
|
||||||
? TextInputType.text
|
|
||||||
: TextInputType.multiline,
|
|
||||||
onSubmitted:
|
onSubmitted:
|
||||||
controller.onInputBarSubmitted,
|
controller.onInputBarSubmitted,
|
||||||
focusNode: controller.inputFocus,
|
focusNode: controller.inputFocus,
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:famedlysdk/famedlysdk.dart';
|
import 'package:famedlysdk/famedlysdk.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_typeahead/flutter_typeahead.dart';
|
import 'package:flutter_typeahead/flutter_typeahead.dart';
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'avatar.dart';
|
import 'avatar.dart';
|
||||||
@ -263,7 +264,37 @@ class InputBar extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return TypeAheadField<Map<String, String>>(
|
return Shortcuts(
|
||||||
|
shortcuts: {
|
||||||
|
LogicalKeySet(LogicalKeyboardKey.shift, LogicalKeyboardKey.enter):
|
||||||
|
NewLineIntent(),
|
||||||
|
LogicalKeySet(LogicalKeyboardKey.enter): SubmitLineIntent(),
|
||||||
|
},
|
||||||
|
child: Actions(
|
||||||
|
actions: {
|
||||||
|
NewLineIntent: CallbackAction(onInvoke: (i) {
|
||||||
|
final val = controller.value;
|
||||||
|
final selection = val.selection.start;
|
||||||
|
final messageWithoutNewLine =
|
||||||
|
controller.text.substring(0, val.selection.start) +
|
||||||
|
'\n' +
|
||||||
|
controller.text.substring(val.selection.start);
|
||||||
|
controller.value = TextEditingValue(
|
||||||
|
text: messageWithoutNewLine,
|
||||||
|
selection: TextSelection.fromPosition(
|
||||||
|
TextPosition(offset: selection + 1),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
}),
|
||||||
|
SubmitLineIntent: CallbackAction(onInvoke: (i) {
|
||||||
|
if (PlatformInfos.kIsWeb || PlatformInfos.isDesktop){
|
||||||
|
onSubmitted(controller.text);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
child: TypeAheadField<Map<String, String>>(
|
||||||
direction: AxisDirection.up,
|
direction: AxisDirection.up,
|
||||||
hideOnEmpty: true,
|
hideOnEmpty: true,
|
||||||
hideOnLoading: true,
|
hideOnLoading: true,
|
||||||
@ -281,9 +312,10 @@ class InputBar extends StatelessWidget {
|
|||||||
// it sets the types for the callback incorrectly
|
// it sets the types for the callback incorrectly
|
||||||
onSubmitted(text);
|
onSubmitted(text);
|
||||||
},
|
},
|
||||||
focusNode: focusNode,
|
//focusNode: focusNode,
|
||||||
controller: controller,
|
controller: controller,
|
||||||
decoration: decoration,
|
decoration: decoration,
|
||||||
|
focusNode: focusNode,
|
||||||
onChanged: (text) {
|
onChanged: (text) {
|
||||||
// fix for the library for now
|
// fix for the library for now
|
||||||
// it sets the types for the callback incorrectly
|
// it sets the types for the callback incorrectly
|
||||||
@ -292,7 +324,8 @@ class InputBar extends StatelessWidget {
|
|||||||
textCapitalization: TextCapitalization.sentences,
|
textCapitalization: TextCapitalization.sentences,
|
||||||
),
|
),
|
||||||
suggestionsCallback: getSuggestions,
|
suggestionsCallback: getSuggestions,
|
||||||
itemBuilder: (c, s) => buildSuggestion(c, s, Matrix.of(context).client),
|
itemBuilder: (c, s) =>
|
||||||
|
buildSuggestion(c, s, Matrix.of(context).client),
|
||||||
onSuggestionSelected: (Map<String, String> suggestion) =>
|
onSuggestionSelected: (Map<String, String> suggestion) =>
|
||||||
insertSuggestion(context, suggestion),
|
insertSuggestion(context, suggestion),
|
||||||
errorBuilder: (BuildContext context, Object error) => Container(),
|
errorBuilder: (BuildContext context, Object error) => Container(),
|
||||||
@ -300,6 +333,12 @@ class InputBar extends StatelessWidget {
|
|||||||
Container(), // fix loading briefly flickering a dark box
|
Container(), // fix loading briefly flickering a dark box
|
||||||
noItemsFoundBuilder: (BuildContext context) =>
|
noItemsFoundBuilder: (BuildContext context) =>
|
||||||
Container(), // fix loading briefly showing no suggestions
|
Container(), // fix loading briefly showing no suggestions
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NewLineIntent extends Intent {}
|
||||||
|
|
||||||
|
class SubmitLineIntent extends Intent {}
|
||||||
|
Loading…
Reference in New Issue
Block a user