wrap chat input row in stateful widget and rebuild on choreo update to keep hint text and send button up-to-date

pull/1384/head
ggurdin 1 year ago
parent 5c7a1f554b
commit cace965456
No known key found for this signature in database
GPG Key ID: A01CB41737CBB478

@ -1,9 +1,8 @@
import 'package:animations/animations.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart';
import 'package:fluffychat/pages/chat/input_bar.dart';
import 'package:fluffychat/pangea/choreographer/widgets/send_button.dart';
import 'package:fluffychat/pangea/constants/language_constants.dart';
import 'package:fluffychat/pangea/widgets/chat/input_bar_wrapper.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
@ -34,7 +33,7 @@ class ChatInputRow extends StatelessWidget {
controller.pangeaController.languageController.activeL2Model();
String hintText() {
if (controller.choreographer.choreoMode == ChoreoMode.it) {
if (controller.choreographer.itController.willOpen) {
return L10n.of(context)!.buildTranslation;
}
return activel1 != null &&
@ -322,10 +321,7 @@ class ChatInputRow extends StatelessWidget {
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 0.0),
// #Pangea
// child: InputBar(
child: InputBarWrapper(
// Pangea#
child: InputBar(
room: controller.room,
minLines: 1,
maxLines: 8,

@ -5,7 +5,6 @@ import 'package:fluffychat/pages/chat/chat_app_bar_list_tile.dart';
import 'package:fluffychat/pages/chat/chat_app_bar_title.dart';
import 'package:fluffychat/pages/chat/chat_emoji_picker.dart';
import 'package:fluffychat/pages/chat/chat_event_list.dart';
import 'package:fluffychat/pages/chat/chat_input_row.dart';
import 'package:fluffychat/pages/chat/pinned_events.dart';
import 'package:fluffychat/pages/chat/reactions_picker.dart';
import 'package:fluffychat/pages/chat/reply_display.dart';
@ -13,6 +12,7 @@ import 'package:fluffychat/pangea/choreographer/widgets/it_bar.dart';
import 'package:fluffychat/pangea/choreographer/widgets/start_igc_button.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart';
import 'package:fluffychat/pangea/widgets/chat/chat_floating_action_button.dart';
import 'package:fluffychat/pangea/widgets/chat/input_bar_wrapper.dart';
import 'package:fluffychat/utils/account_config.dart';
import 'package:fluffychat/widgets/chat_settings_popup_menu.dart';
import 'package:fluffychat/widgets/connection_status_header.dart';
@ -498,7 +498,9 @@ class ChatView extends StatelessWidget {
),
ReactionsPicker(controller),
ReplyDisplay(controller),
ChatInputRow(controller),
ChatInputRowWrapper(
controller: controller,
),
ChatEmojiPicker(controller),
],
),

@ -1,48 +1,23 @@
import 'dart:async';
import 'dart:typed_data';
import 'package:fluffychat/pages/chat/input_bar.dart';
import 'package:fluffychat/pages/chat/chat.dart';
import 'package:fluffychat/pages/chat/chat_input_row.dart';
import 'package:fluffychat/pangea/widgets/igc/pangea_text_controller.dart';
import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart';
class InputBarWrapper extends StatefulWidget {
final Room room;
final int? minLines;
final int? maxLines;
final TextInputType? keyboardType;
final TextInputAction? textInputAction;
final ValueChanged<String>? onSubmitted;
final ValueChanged<Uint8List?>? onSubmitImage;
final FocusNode? focusNode;
final PangeaTextController? controller;
final InputDecoration? decoration;
final ValueChanged<String>? onChanged;
final bool? autofocus;
final bool readOnly;
class ChatInputRowWrapper extends StatefulWidget {
final ChatController controller;
const InputBarWrapper({
required this.room,
this.minLines,
this.maxLines,
this.keyboardType,
this.onSubmitted,
this.onSubmitImage,
this.focusNode,
this.controller,
this.decoration,
this.onChanged,
this.autofocus,
this.textInputAction,
this.readOnly = false,
const ChatInputRowWrapper({
required this.controller,
super.key,
});
@override
State<InputBarWrapper> createState() => InputBarWrapperState();
State<ChatInputRowWrapper> createState() => ChatInputRowWrapperState();
}
class InputBarWrapperState extends State<InputBarWrapper> {
class ChatInputRowWrapperState extends State<ChatInputRowWrapper> {
StreamSubscription? _choreoSub;
String _currentText = '';
@ -50,7 +25,7 @@ class InputBarWrapperState extends State<InputBarWrapper> {
void initState() {
// Rebuild the widget each time there's an update from choreo
_choreoSub =
widget.controller?.choreographer.stateListener.stream.listen((_) {
widget.controller.choreographer.stateListener.stream.listen((_) {
setState(() {});
});
super.initState();
@ -63,10 +38,6 @@ class InputBarWrapperState extends State<InputBarWrapper> {
}
void refreshOnChange(String text) {
if (widget.onChanged != null) {
widget.onChanged!(text);
}
final bool decreasedFromMaxLength =
_currentText.length >= PangeaTextController.maxLength &&
text.length < PangeaTextController.maxLength;
@ -81,21 +52,5 @@ class InputBarWrapperState extends State<InputBarWrapper> {
}
@override
Widget build(BuildContext context) {
return InputBar(
room: widget.room,
minLines: widget.minLines,
maxLines: widget.maxLines,
keyboardType: widget.keyboardType,
onSubmitted: widget.onSubmitted,
onSubmitImage: widget.onSubmitImage,
focusNode: widget.focusNode,
controller: widget.controller,
decoration: widget.decoration,
onChanged: refreshOnChange,
autofocus: widget.autofocus,
textInputAction: widget.textInputAction,
readOnly: widget.readOnly,
);
}
Widget build(BuildContext context) => ChatInputRow(widget.controller);
}

Loading…
Cancel
Save