fix: don't show multiple of the same instruction card (#1537)
This commit is contained in:
parent
65a8a16646
commit
a638319926
3 changed files with 30 additions and 8 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ Future<void> instructionsShowPopup(
|
|||
maxWidth: 300,
|
||||
transformTargetId: transformTargetKey,
|
||||
closePrevOverlay: false,
|
||||
overlayKey: key.toString(),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue