Flutter: 是否有一个 onhold 选项而不是被压制一次来重复 SetState
Flutter: Is there an onhold option instead of oppressed once to repeat SetState
我想要一个可以按住的按钮,然后 Setstate 会重复,除非我停止按住它。
我是初学者,正在开发我的第一个应用程序。我想计算体积。人们必须输入高度、宽度和深度。我不想在文本(表单)字段中,因为键盘是必需的。我找到了一个有两个按钮的解决方案,一个加号按钮和一个减号按钮。
我让它工作,但人们必须经常按下按钮来设置他们想要的高度值。
我想不是被压迫,我用的是暂停的东西,计数器正在快速增加。但是我不知道解决方法。
RawMaterialButton(
child: Icon(MdiIcons.minus),
onPressed: () {
setState(() {
width--;
好的,我没有修复它。作为初学者,这对我来说太复杂了。
我找到了另一个解决方案。
我连续排了三个children:
用于微调的减号按钮和加号按钮
a slider-bar 代表大步。
这是我使用的代码,你有更好的解决方案,让我知道。我只是把它放在像我这样的其他初学者。
我要特别感谢试图帮助我的@Abbas.M。
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
AnimatedOpacity(
opacity: height == 1 ? 0.0 : 1.0,
duration: Duration(milliseconds: 500),
child: RawMaterialButton(
child: Icon(MdiIcons.minus),
onPressed: () {
setState(() {
height > 1 ? height-- : height = height;
});
},
constraints: BoxConstraints.tightFor(
width: 25.0,
height: 25.0,
),
shape: CircleBorder(),
fillColor: white,
),
),
SliderTheme(
data: SliderTheme.of(context).copyWith(
inactiveTrackColor: cAppBottomBar,
activeTrackColor: white,
thumbColor: white,
overlayColor: cShadow,
thumbShape:
RoundSliderThumbShape(enabledThumbRadius: 10.0),
overlayShape:
RoundSliderOverlayShape(overlayRadius: 17.0),
),
child: Slider(
value: height.toDouble(),
min: 1,
max: 300,
onChanged: (value) {
setState(() {
height = value.toInt();
});
}),
),
AnimatedOpacity(
opacity: height == 300 ? 0.0 : 1.0,
duration: Duration(milliseconds: 500),
child: RawMaterialButton(
child: Icon(Icons.add),
onPressed: () {
setState(() {
height < 300 ? height++ : height = height;
});
},
constraints: BoxConstraints.tightFor(
width: 25.0,
height: 25.0,
),
shape: CircleBorder(),
fillColor: white,
),
),
如果您仍然对这个话题感兴趣,您可以尝试 holding_gesture
,参见 https://pub.dev/packages/holding_gesture
您应该使用 GestureDetector 小部件的 onTapDown
(用于按住按钮)和 onTapUp
(用于松开用户的手指)功能。
GestureDetector(
onTapDown: (details) {
print("Someone is touchin' me !!");
},
onTapUp: (details) {
print("I relaxed, oh.");
},
child: Container(
height: 100,
width: 100,
color: Colors.brown,
)),
我想要一个可以按住的按钮,然后 Setstate 会重复,除非我停止按住它。
我是初学者,正在开发我的第一个应用程序。我想计算体积。人们必须输入高度、宽度和深度。我不想在文本(表单)字段中,因为键盘是必需的。我找到了一个有两个按钮的解决方案,一个加号按钮和一个减号按钮。
我让它工作,但人们必须经常按下按钮来设置他们想要的高度值。
我想不是被压迫,我用的是暂停的东西,计数器正在快速增加。但是我不知道解决方法。
RawMaterialButton(
child: Icon(MdiIcons.minus),
onPressed: () {
setState(() {
width--;
好的,我没有修复它。作为初学者,这对我来说太复杂了。 我找到了另一个解决方案。 我连续排了三个children: 用于微调的减号按钮和加号按钮 a slider-bar 代表大步。
这是我使用的代码,你有更好的解决方案,让我知道。我只是把它放在像我这样的其他初学者。 我要特别感谢试图帮助我的@Abbas.M。
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
AnimatedOpacity(
opacity: height == 1 ? 0.0 : 1.0,
duration: Duration(milliseconds: 500),
child: RawMaterialButton(
child: Icon(MdiIcons.minus),
onPressed: () {
setState(() {
height > 1 ? height-- : height = height;
});
},
constraints: BoxConstraints.tightFor(
width: 25.0,
height: 25.0,
),
shape: CircleBorder(),
fillColor: white,
),
),
SliderTheme(
data: SliderTheme.of(context).copyWith(
inactiveTrackColor: cAppBottomBar,
activeTrackColor: white,
thumbColor: white,
overlayColor: cShadow,
thumbShape:
RoundSliderThumbShape(enabledThumbRadius: 10.0),
overlayShape:
RoundSliderOverlayShape(overlayRadius: 17.0),
),
child: Slider(
value: height.toDouble(),
min: 1,
max: 300,
onChanged: (value) {
setState(() {
height = value.toInt();
});
}),
),
AnimatedOpacity(
opacity: height == 300 ? 0.0 : 1.0,
duration: Duration(milliseconds: 500),
child: RawMaterialButton(
child: Icon(Icons.add),
onPressed: () {
setState(() {
height < 300 ? height++ : height = height;
});
},
constraints: BoxConstraints.tightFor(
width: 25.0,
height: 25.0,
),
shape: CircleBorder(),
fillColor: white,
),
),
如果您仍然对这个话题感兴趣,您可以尝试 holding_gesture
,参见 https://pub.dev/packages/holding_gesture
您应该使用 GestureDetector 小部件的 onTapDown
(用于按住按钮)和 onTapUp
(用于松开用户的手指)功能。
GestureDetector(
onTapDown: (details) {
print("Someone is touchin' me !!");
},
onTapUp: (details) {
print("I relaxed, oh.");
},
child: Container(
height: 100,
width: 100,
color: Colors.brown,
)),