如何解决我该如何在小部件之间交换焦点?
我正在使用Flutter开发平板电脑应用程序。我有一组按钮和一块画布。我要在按钮上执行拖动操作,超出按钮范围后,我要开始在画布上绘制符号并能够拖动它,直到释放触摸手势为止。到目前为止,我在按钮上插入了一个手势侦听器,并观察了按钮上的相对水平移动,并且负阈值表示触摸已经离开按钮的左侧,并且现在开始在画布上移动。但是手势侦听器被按钮卡住了,如何将焦点从按钮转移到画布上?下面是我的按钮代码:
import 'package:Flutter/material.dart';
import 'package:Flutter/widgets.dart';
import 'package:material_design_icons_Flutter/material_design_icons_Flutter.dart';
import './plan_display_page/plan_display_page.dart';
import './vars.dart' as vars;
// ignore: must_be_immutable
class DraggableMachineButton extends StatefulWidget {
PlandisplayPageState pdps;
DraggableMachineButton(
PlandisplayPageState pdps,) {
this.pdps = pdps;
}
@override
State<StatefulWidget> createState() => _DraggableMachineButtonState();
}
class _DraggableMachineButtonState extends State<DraggableMachineButton> {
PlandisplayPageState pdps;
bool _buttonpressed = false;
bool _loopActive = false;
void _moveWhilepressed() async {
// make sure that only one loop is active
if (_loopActive) return;
_loopActive = true;
if (_buttonpressed) {
print('DRAAGGGGG THE MACHINE');
// do your thing
setState(() {
vars.machineDragging = true;
});
// wait a bit
await Future.delayed(Duration(milliseconds: 100));
}
_loopActive = false;
}
@override
void initState() {
this.pdps = widget.pdps;
super.initState();
}
//This is unnecessary
@override
void didUpdateWidget(DraggableMachineButton oldWidget) {
super.didUpdateWidget(oldWidget);
}
@override
Widget build(BuildContext context) {
// return Focus(
// focusNode: null,return Listener(
onPointerDown: (details) {
_buttonpressed = true;
_moveWhilepressed();
},onPointerUp: (details) {
_buttonpressed = false;
_makeStopRequest();
},onPointerCancel: (details) {
print('cancel cancel cancel cancel');
},onPointerSignal: (details) {
print('SIGNAL ' + details.toString());
},onPointerMove: (details) {
// print('move move move ' + details.localPosition.toString());
if (details.localPosition.dx < -10) {
vars.startDraggingMachine = true;
print('LOC ' + details.localPosition.toString());
print('POS ' + details.position.toString());
// globals.cct.canvasContainerTransformableStateBuilder.gt
// .onHorizontalDragStart(
// DragStartDetails(localPosition: details.localPosition));
// print('xxxxxx');
// globals.cct.canvasContainerTransformableStateBuilder.build(context);//
// globals.cct.canvasContainerTransformableStateBuilder.onTapUp(details.localPosition);
vars.novaCoord[0] = details.localPosition.dx;
vars.novaCoord[1] = 0 - details.localPosition.dy;
// _loopActive = false;
// FocusScopeNode currentFocus = FocusScope.of(globals.cct.canvasContainerTransformableStateBuilder.context);
}
},child: Container(
height: vars.buttonHeight * 1.4,width: vars.buttonWidth * 1.4,margin: EdgeInsets.only(
right: vars.placeMachineTapped &&
(vars.distanceMeasurementStage < 0) &&
(!vars.isMachinePlaced())
? 0
: 1200,),child: FittedBox(
fit: BoxFit.fill,child: FlatButton.icon(
icon: Icon(
MdiIcons.expansionCard,color: Colors.greenAccent,size: vars.tokenIconSize,shape: RoundedRectangleBorder(),color: Color.fromARGB(255,70,104,132),splashColor: Colors.blueAccent,hoverColor: Colors.green,label: Text(
'MACHINE',style: TextStyle(
fontSize: 14.0,color: Colors.white,textAlign: TextAlign.center,// ),// ),onpressed: () {
if (!vars.crossingRefLinesExists) return;
// vars.machinePositioned = true;
vars.placeMachinetokenTapped = true;
},);
}
_makeStopRequest() async {
// pdps.connect();
print('STOP DRAGGING THE MACHINE');
vars.machineDragging = false;
// pdps.sendMessage('stop',false);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。