Let multiple overlays coexist
This commit is contained in:
parent
27504ee6af
commit
a4cd5d702b
5 changed files with 34 additions and 18 deletions
|
|
@ -27,7 +27,7 @@ class PangeaLanguage {
|
|||
|
||||
static Future<void> initialize() async {
|
||||
try {
|
||||
_langList = await _getCahedFlags();
|
||||
_langList = await _getCachedFlags();
|
||||
if (await _shouldFetch || _langList.isEmpty) {
|
||||
_langList = await LanguageRepo.fetchLanguages();
|
||||
|
||||
|
|
@ -77,7 +77,7 @@ class PangeaLanguage {
|
|||
await MyShared.saveJson(PrefKey.flags, flagMap);
|
||||
}
|
||||
|
||||
static Future<List<LanguageModel>> _getCahedFlags() async {
|
||||
static Future<List<LanguageModel>> _getCachedFlags() async {
|
||||
final Map<dynamic, dynamic>? flagsMap =
|
||||
await MyShared.readJson(PrefKey.flags);
|
||||
if (flagsMap == null) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import 'package:sentry_flutter/sentry_flutter.dart';
|
|||
|
||||
class PangeaAnyState {
|
||||
final Map<String, LayerLinkAndKey> _layerLinkAndKeys = {};
|
||||
OverlayEntry? overlay;
|
||||
List<OverlayEntry> entries = [];
|
||||
|
||||
dispose() {
|
||||
closeOverlay();
|
||||
|
|
@ -32,26 +32,32 @@ class PangeaAnyState {
|
|||
_layerLinkAndKeys.remove(transformTargetId);
|
||||
}
|
||||
|
||||
void openOverlay(OverlayEntry entry, BuildContext context) {
|
||||
closeOverlay();
|
||||
overlay = entry;
|
||||
Overlay.of(context).insert(overlay!);
|
||||
void openOverlay(
|
||||
OverlayEntry entry,
|
||||
BuildContext context, {
|
||||
bool closePrevOverlay = true,
|
||||
}) {
|
||||
if (closePrevOverlay) {
|
||||
closeOverlay();
|
||||
}
|
||||
entries.add(entry);
|
||||
Overlay.of(context).insert(entry);
|
||||
}
|
||||
|
||||
void closeOverlay() {
|
||||
if (overlay != null) {
|
||||
if (entries.isNotEmpty) {
|
||||
try {
|
||||
overlay?.remove();
|
||||
entries.last.remove();
|
||||
} catch (err, s) {
|
||||
ErrorHandler.logError(
|
||||
e: err,
|
||||
s: s,
|
||||
data: {
|
||||
"overlay": overlay,
|
||||
"overlay": entries.last,
|
||||
},
|
||||
);
|
||||
}
|
||||
overlay = null;
|
||||
entries.removeLast();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -94,6 +94,7 @@ class InstructionsController {
|
|||
),
|
||||
cardSize: const Size(300.0, 300.0),
|
||||
transformTargetId: transformTargetKey,
|
||||
closePrevOverlay: false,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,9 +25,12 @@ class OverlayUtil {
|
|||
Color? backgroundColor,
|
||||
Alignment? targetAnchor,
|
||||
Alignment? followerAnchor,
|
||||
bool closePrevOverlay = true,
|
||||
}) {
|
||||
try {
|
||||
MatrixState.pAnyState.closeOverlay();
|
||||
if (closePrevOverlay) {
|
||||
MatrixState.pAnyState.closeOverlay();
|
||||
}
|
||||
final LayerLinkAndKey layerLinkAndKey =
|
||||
MatrixState.pAnyState.layerLinkAndKey(transformTargetId);
|
||||
|
||||
|
|
@ -58,7 +61,8 @@ class OverlayUtil {
|
|||
),
|
||||
);
|
||||
|
||||
MatrixState.pAnyState.openOverlay(entry, context);
|
||||
MatrixState.pAnyState
|
||||
.openOverlay(entry, context, closePrevOverlay: closePrevOverlay);
|
||||
} catch (err, stack) {
|
||||
debugger(when: kDebugMode);
|
||||
ErrorHandler.logError(e: err, s: stack);
|
||||
|
|
@ -72,6 +76,7 @@ class OverlayUtil {
|
|||
required String transformTargetId,
|
||||
backDropToDismiss = true,
|
||||
Color? borderColor,
|
||||
bool closePrevOverlay = true,
|
||||
}) {
|
||||
try {
|
||||
final LayerLinkAndKey layerLinkAndKey =
|
||||
|
|
@ -101,6 +106,7 @@ class OverlayUtil {
|
|||
offset: cardOffset,
|
||||
backDropToDismiss: backDropToDismiss,
|
||||
borderColor: borderColor,
|
||||
closePrevOverlay: closePrevOverlay,
|
||||
);
|
||||
} catch (err, stack) {
|
||||
debugger(when: kDebugMode);
|
||||
|
|
@ -176,7 +182,7 @@ class OverlayUtil {
|
|||
return Offset(dx, dy);
|
||||
}
|
||||
|
||||
static bool get isOverlayOpen => MatrixState.pAnyState.overlay != null;
|
||||
static bool get isOverlayOpen => MatrixState.pAnyState.entries.isNotEmpty;
|
||||
}
|
||||
|
||||
class TransparentBackdrop extends StatelessWidget {
|
||||
|
|
|
|||
|
|
@ -135,8 +135,8 @@ class ToolbarDisplayController {
|
|||
backgroundColor: const Color.fromRGBO(0, 0, 0, 1).withAlpha(100),
|
||||
);
|
||||
|
||||
if (MatrixState.pAnyState.overlay != null) {
|
||||
overlayId = MatrixState.pAnyState.overlay.hashCode.toString();
|
||||
if (MatrixState.pAnyState.entries.isNotEmpty) {
|
||||
overlayId = MatrixState.pAnyState.entries.last.hashCode.toString();
|
||||
}
|
||||
|
||||
if (mode != null) {
|
||||
|
|
@ -150,8 +150,11 @@ class ToolbarDisplayController {
|
|||
|
||||
bool get highlighted {
|
||||
if (overlayId == null) return false;
|
||||
if (MatrixState.pAnyState.overlay == null) overlayId = null;
|
||||
return MatrixState.pAnyState.overlay.hashCode.toString() == overlayId;
|
||||
if (MatrixState.pAnyState.entries.isEmpty) {
|
||||
overlayId = null;
|
||||
return false;
|
||||
}
|
||||
return MatrixState.pAnyState.entries.last.hashCode.toString() == overlayId;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue