Merge pull request #76 from pangeachat/overlay-fix

overlay bug fix
pull/1011/head
ggurdin 2 years ago committed by GitHub
commit 9480825119
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -64,53 +64,56 @@ class ToolbarDisplayController {
messageWidth = transformTargetSize.width;
}
Widget overlayEntry;
try {
overlayEntry = Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: pangeaMessageEvent.ownMessage
? CrossAxisAlignment.end
: CrossAxisAlignment.start,
children: [
toolbar!,
const SizedBox(height: 6),
OverlayMessage(
pangeaMessageEvent.event,
timeline: pangeaMessageEvent.timeline,
immersionMode: immersionMode,
ownMessage: pangeaMessageEvent.ownMessage,
toolbarController: this,
width: messageWidth,
),
],
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
Widget overlayEntry;
try {
overlayEntry = Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: pangeaMessageEvent.ownMessage
? CrossAxisAlignment.end
: CrossAxisAlignment.start,
children: [
toolbar!,
const SizedBox(height: 6),
OverlayMessage(
pangeaMessageEvent.event,
timeline: pangeaMessageEvent.timeline,
immersionMode: immersionMode,
ownMessage: pangeaMessageEvent.ownMessage,
toolbarController: this,
width: messageWidth,
),
],
);
} catch (err) {
ErrorHandler.logError(e: err, s: StackTrace.current);
return;
}
OverlayUtil.showOverlay(
context: context,
child: overlayEntry,
transformTargetId: targetId,
targetAnchor: pangeaMessageEvent.ownMessage
? Alignment.bottomRight
: Alignment.bottomLeft,
followerAnchor: pangeaMessageEvent.ownMessage
? Alignment.bottomRight
: Alignment.bottomLeft,
backgroundColor: const Color.fromRGBO(0, 0, 0, 1).withAlpha(164),
);
} catch (err) {
ErrorHandler.logError(e: err, s: StackTrace.current);
return;
}
OverlayUtil.showOverlay(
context: context,
child: overlayEntry,
transformTargetId: targetId,
targetAnchor: pangeaMessageEvent.ownMessage
? Alignment.bottomRight
: Alignment.bottomLeft,
followerAnchor: pangeaMessageEvent.ownMessage
? Alignment.bottomRight
: Alignment.bottomLeft,
backgroundColor: const Color.fromRGBO(0, 0, 0, 1).withAlpha(164),
);
if (MatrixState.pAnyState.overlay != null) {
overlayId = MatrixState.pAnyState.overlay.hashCode.toString();
}
if (MatrixState.pAnyState.overlay != null) {
overlayId = MatrixState.pAnyState.overlay.hashCode.toString();
}
if (mode != null) {
Future.delayed(
const Duration(milliseconds: 100),
() => toolbarModeStream.add(mode),
);
}
if (mode != null) {
Future.delayed(
const Duration(milliseconds: 100),
() => toolbarModeStream.add(mode),
);
}
});
}
bool get highlighted =>
@ -141,12 +144,12 @@ class MessageToolbar extends StatefulWidget {
class MessageToolbarState extends State<MessageToolbar> {
Widget? child;
MessageMode? _currentMode;
MessageMode? currentMode;
bool hasSelectedText = false;
late StreamSubscription<String?> _selectionStream;
late StreamSubscription<MessageMode> _toolbarModeStream;
late StreamSubscription<String?> selectionStream;
late StreamSubscription<MessageMode> toolbarModeStream;
IconData _getIconData(MessageMode mode) {
IconData getIconData(MessageMode mode) {
switch (mode) {
case MessageMode.translation:
return Icons.g_translate;
@ -159,7 +162,7 @@ class MessageToolbarState extends State<MessageToolbar> {
}
}
bool _enabledButton(MessageMode mode) {
bool enabledButton(MessageMode mode) {
switch (mode) {
case MessageMode.translation:
return true;
@ -175,8 +178,8 @@ class MessageToolbarState extends State<MessageToolbar> {
void updateMode(MessageMode newMode) {
debugPrint("updating toolbar mode");
setState(() => _currentMode = newMode);
switch (_currentMode) {
setState(() => currentMode = newMode);
switch (currentMode) {
case MessageMode.translation:
showTranslation();
break;
@ -240,11 +243,11 @@ class MessageToolbarState extends State<MessageToolbar> {
hasSelectedText = true;
}
_toolbarModeStream = widget.toolbarModeStream.stream.listen((mode) {
toolbarModeStream = widget.toolbarModeStream.stream.listen((mode) {
updateMode(mode);
});
_selectionStream =
selectionStream =
widget.textSelection.selectionStream.stream.listen((value) {
final bool shouldSetState =
value != null && !hasSelectedText || value == null && hasSelectedText;
@ -257,8 +260,8 @@ class MessageToolbarState extends State<MessageToolbar> {
@override
void dispose() {
_selectionStream.cancel();
_toolbarModeStream.cancel();
selectionStream.cancel();
toolbarModeStream.cancel();
super.dispose();
}
@ -303,12 +306,12 @@ class MessageToolbarState extends State<MessageToolbar> {
mainAxisSize: MainAxisSize.min,
children: MessageMode.values.map((mode) {
return IconButton(
icon: Icon(_getIconData(mode)),
color: _currentMode == mode
icon: Icon(getIconData(mode)),
color: currentMode == mode
? Theme.of(context).colorScheme.primary
: null,
onPressed:
_enabledButton(mode) ? () => updateMode(mode) : null,
enabledButton(mode) ? () => updateMode(mode) : null,
);
}).toList() +
[

Loading…
Cancel
Save