@@ -446,20 +446,13 @@ void saveGesturesToLocal(BuildContext context, SchemeProvider schemeProvider, Li
446446
447447List <DDataCell > _buildRowCellsEditing (BuildContext context) {
448448 var gesture = context.read <GesturePropProvider >();
449- var schemeTree = context.read <SchemeProvider >().buildSchemeTree ();
449+ var schemeTree = context.read <SchemeProvider >().buildSchemeTree (availableGestureId : gesture.id );
450450 var availableFingers = schemeTree.nodes.where ((node) => ! node.fullFiled).map ((e) => e.fingers);
451- if (! availableFingers.contains (gesture.fingers)) {
452- availableFingers = [...availableFingers, gesture.fingers! ]..sort ();
453- }
454-
455451 var availableGestures = schemeTree.nodes
456452 .firstWhere ((node) => node.fingers == gesture.fingers)
457453 .nodes
458454 .where ((node) => ! node.fullFiled)
459455 .map ((e) => e.type);
460- if (! availableGestures.any ((type) => type == gesture.gesture)) {
461- availableGestures = [...availableGestures, gesture.gesture! ]..sort ((a, b) => a.index - b.index);
462- }
463456
464457 var availableDirection = schemeTree.nodes
465458 .firstWhere ((node) => node.fingers == gesture.fingers)
@@ -469,10 +462,6 @@ List<DDataCell> _buildRowCellsEditing(BuildContext context) {
469462 .where ((node) => ! node.fullFiled)
470463 .map ((e) => e.direction);
471464
472- if (! availableDirection.any ((direction) => direction == gesture.direction)) {
473- availableDirection = [...availableDirection, gesture.direction! ]..sort ((a, b) => a.index - b.index);
474- }
475-
476465 return [
477466 DButton .dropdown (
478467 enabled: true ,
@@ -487,10 +476,28 @@ List<DDataCell> _buildRowCellsEditing(BuildContext context) {
487476 )
488477 .toList (),
489478 value: gesture.fingers,
490- onChanged: (value) => context.read <GesturePropProvider >().setProps (
491- fingers: value,
492- editMode: true ,
493- ),
479+ onChanged: (value) {
480+ var gesturePropProvider = context.read <GesturePropProvider >();
481+ Gesture ? newGestureType;
482+ GestureDirection ? newDirection;
483+ if (! schemeTree.nodes
484+ .firstWhere ((e) => e.fingers == value)
485+ .nodes
486+ .firstWhere ((e) => e.type == gesturePropProvider.gesture)
487+ .nodes
488+ .firstWhere ((e) => e.direction == gesturePropProvider.direction)
489+ .available) {
490+ var availableNode = schemeTree.nodes.firstWhere ((e) => e.fingers == value).availableNode;
491+ newGestureType = availableNode.type;
492+ newDirection = availableNode.availableNode.direction;
493+ }
494+ gesturePropProvider.setProps (
495+ fingers: value,
496+ gesture: newGestureType ?? gesturePropProvider.gesture,
497+ direction: newDirection ?? gesturePropProvider.direction,
498+ editMode: true ,
499+ );
500+ },
494501 isExpanded: true ,
495502 ),
496503 ),
@@ -511,10 +518,19 @@ List<DDataCell> _buildRowCellsEditing(BuildContext context) {
511518 )
512519 .toList (),
513520 value: gesture.gesture,
514- onChanged: (value) => context.read <GesturePropProvider >().setProps (
515- gesture: value,
516- editMode: true ,
517- ),
521+ onChanged: (value) {
522+ var gesturePropProvider = context.read <GesturePropProvider >();
523+ gesturePropProvider.setProps (
524+ gesture: value,
525+ direction: schemeTree.nodes
526+ .firstWhere ((node) => node.fingers == gesture.fingers)
527+ .nodes
528+ .firstWhere ((node) => node.type == value)
529+ .availableNode
530+ .direction,
531+ editMode: true ,
532+ );
533+ },
518534 isExpanded: true ,
519535 ),
520536 ),
0 commit comments