fix: don't show multiple of the same instruction card (#1537)

This commit is contained in:
ggurdin 2025-01-22 15:30:31 -05:00 committed by GitHub
parent 65a8a16646
commit a638319926
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 30 additions and 8 deletions

View file

@ -4,9 +4,16 @@ import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
class OverlayListEntry {
final OverlayEntry entry;
final String? key;
OverlayListEntry(this.entry, {this.key});
}
class PangeaAnyState {
final Map<String, LayerLinkAndKey> _layerLinkAndKeys = {};
List<OverlayEntry> entries = [];
List<OverlayListEntry> entries = [];
dispose() {
closeOverlay();
@ -38,18 +45,24 @@ class PangeaAnyState {
OverlayEntry entry,
BuildContext context, {
bool closePrevOverlay = true,
String? overlayKey,
}) {
if (overlayKey != null &&
entries.any((element) => element.key == overlayKey)) {
return;
}
if (closePrevOverlay) {
closeOverlay();
}
entries.add(entry);
entries.add(OverlayListEntry(entry, key: overlayKey));
Overlay.of(context).insert(entry);
}
void closeOverlay() {
if (entries.isNotEmpty) {
try {
entries.last.remove();
entries.last.entry.remove();
} catch (err, s) {
ErrorHandler.logError(
e: err,
@ -66,7 +79,7 @@ class PangeaAnyState {
void closeAllOverlays() {
for (int i = 0; i < entries.length; i++) {
try {
entries.last.remove();
entries.last.entry.remove();
} catch (err, s) {
ErrorHandler.logError(
e: err,

View file

@ -29,6 +29,7 @@ class OverlayUtil {
Function? onDismiss,
OverlayPositionEnum position = OverlayPositionEnum.transform,
Offset? offset,
String? overlayKey,
}) {
try {
if (closePrevOverlay) {
@ -70,8 +71,12 @@ class OverlayUtil {
),
);
MatrixState.pAnyState
.openOverlay(entry, context, closePrevOverlay: closePrevOverlay);
MatrixState.pAnyState.openOverlay(
entry,
context,
closePrevOverlay: closePrevOverlay,
overlayKey: overlayKey,
);
} catch (err, stack) {
debugger(when: kDebugMode);
ErrorHandler.logError(
@ -91,6 +96,7 @@ class OverlayUtil {
backDropToDismiss = true,
Color? borderColor,
bool closePrevOverlay = true,
String? overlayKey,
}) {
try {
final LayerLinkAndKey layerLinkAndKey =
@ -114,14 +120,15 @@ class OverlayUtil {
final hasLeftOverflow = (horizontalMidpoint - halfMaxWidth) < 0;
final hasRightOverflow = (horizontalMidpoint + halfMaxWidth) >
MediaQuery.of(context).size.width;
double xOffset = 0;
MediaQuery.of(context).size.width - (horizontalMidpoint + halfMaxWidth);
if (hasLeftOverflow) {
xOffset = (horizontalMidpoint - halfMaxWidth) * -1;
xOffset = (horizontalMidpoint - halfMaxWidth - 10) * -1;
} else if (hasRightOverflow) {
xOffset = MediaQuery.of(context).size.width -
(horizontalMidpoint + halfMaxWidth);
(horizontalMidpoint + halfMaxWidth + 10);
}
offset = Offset(xOffset, 0);
}
@ -146,6 +153,7 @@ class OverlayUtil {
borderColor: borderColor,
closePrevOverlay: closePrevOverlay,
offset: offset,
overlayKey: overlayKey,
);
} catch (err, stack) {
debugger(when: kDebugMode);

View file

@ -67,6 +67,7 @@ Future<void> instructionsShowPopup(
maxWidth: 300,
transformTargetId: transformTargetKey,
closePrevOverlay: false,
overlayKey: key.toString(),
);
},
);