gpt4 book ai didi

dart - 约束可拖动区域

转载 作者:IT王子 更新时间:2023-10-29 06:55:05 24 4
gpt4 key购买 nike

我正在尝试创建一个可拖动的类似 slider 的小部件(如确认 slider )。我的问题是是否有办法限制可拖动区域?

import 'package:flutter/material.dart';

import 'confirmation_slider.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
body: new ListView(
children: <Widget>[
new Container(
margin: EdgeInsets.only(
top: 50.0
),
),

new Container(
margin: EdgeInsets.only(
left: 50.0,
right: 50.0
),
child: new Draggable(
axis: Axis.horizontal,
child: new FlutterLogo(size: 50.0),
feedback: new FlutterLogo(size: 50.0),
),

height: 50.0,
color: Colors.green
),
],
),
),
);
}
}

我想象容器类会限制可拖动区域,但它似乎并没有这样做。

最佳答案

没有。这不是 Draggable 小部件的目标。相反,使用 GestureDetector 来检测拖动。然后将它与 Align 之类的东西结合起来移动你的内容

这是一个基于您当前代码的完全可用的 slider 。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Slider(),
),
),
);
}
}

class Slider extends StatefulWidget {
final ValueChanged<double> valueChanged;

Slider({this.valueChanged});

@override
SliderState createState() {
return new SliderState();
}
}

class SliderState extends State<Slider> {
ValueNotifier<double> valueListener = ValueNotifier(.0);

@override
void initState() {
valueListener.addListener(notifyParent);
super.initState();
}

void notifyParent() {
if (widget.valueChanged != null) {
widget.valueChanged(valueListener.value);
}
}

@override
Widget build(BuildContext context) {
return Container(
color: Colors.green,
height: 50.0,
padding: EdgeInsets.symmetric(horizontal: 40.0),
child: Builder(
builder: (context) {
final handle = GestureDetector(
onHorizontalDragUpdate: (details) {
valueListener.value = (valueListener.value +
details.delta.dx / context.size.width)
.clamp(.0, 1.0);
},
child: FlutterLogo(size: 50.0),
);

return AnimatedBuilder(
animation: valueListener,
builder: (context, child) {
return Align(
alignment: Alignment(valueListener.value * 2 - 1, .5),
child: child,
);
},
child: handle,
);
},
),
);
}
}

关于dart - 约束可拖动区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51216747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com