fix: make sure the state is implemnt selectable, otherwise return.

This commit is contained in:
Lucas.Xu
2022-07-22 10:43:20 +08:00
parent 6c811aef72
commit e16444f88e

View File

@ -110,8 +110,10 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget>
}
for (final node in nodes) {
final selectable = node.key?.currentState as Selectable?;
if (selectable != null) {
if (node.key?.currentState is! Selectable) {
continue;
}
final selectable = node.key?.currentState as Selectable;
final selectionRects = selectable.getSelectionRectsInSelection(
panStartOffset!, panEndOffset!);
for (final rect in selectionRects) {
@ -126,7 +128,6 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget>
selectionOverlays.add(overlay);
}
}
}
Overlay.of(context)?.insertAll(selectionOverlays);
}
@ -146,8 +147,10 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget>
}
final selectedNode = nodes.first;
final selectable = selectedNode.key?.currentState as Selectable?;
if (selectable != null) {
if (selectedNode.key?.currentState is! Selectable) {
return;
}
final selectable = selectedNode.key?.currentState as Selectable;
final rect = selectable.getCursorRect(tapOffset!);
final cursor = OverlayEntry(
builder: ((context) => Positioned.fromRect(
@ -158,7 +161,6 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget>
)),
);
selectionOverlays.add(cursor);
}
Overlay.of(context)?.insertAll(selectionOverlays);
}
@ -183,12 +185,6 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget>
final tapOffset = this.tapOffset;
if (tapOffset != null) {}
if (node.parent != null && node.key != null) {
if (isNodeInOffset(node, offset)) {
return node;
}
}
for (final child in node.children) {
final result = computeSelectedNodeByTap(child, offset);
if (result != null) {
@ -196,6 +192,12 @@ class _FlowySelectionWidgetState extends State<FlowySelectionWidget>
}
}
if (node.parent != null && node.key != null) {
if (isNodeInOffset(node, offset)) {
return node;
}
}
return null;
}