如何解决如何在Flutter中的Alignmentx,y类中获取x属性的值?
我是Flutter和Dart的新手。我使用Flutter Docs上的example project构建了我的应用。
这是代码:
import 'package:flutter/material.dart';
import 'package:flutter/physics.dart';
main() {
runApp(MaterialApp(home: PhysicsCardDragDemo()));
}
class PhysicsCardDragDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),body: DraggableCard(
child: FlutterLogo(
size: 128,),);
}
}
/// A draggable card that moves back to [Alignment.center] when it's
/// released.
class DraggableCard extends StatefulWidget {
final Widget child;
DraggableCard({this.child});
@override
_DraggableCardState createState() => _DraggableCardState();
}
class _DraggableCardState extends State<DraggableCard>
with SingleTickerProviderStateMixin {
AnimationController _controller;
/// The alignment of the card as it is dragged or being animated.
///
/// While the card is being dragged,this value is set to the values computed
/// in the GestureDetector onPanUpdate callback. If the animation is running,/// this value is set to the value of the [_animation].
Alignment _dragAlignment = Alignment.center;
Animation<Alignment> _animation;
/// Calculates and runs a [SpringSimulation].
void _runAnimation(Offset pixelsPerSecond,Size size) {
_animation = _controller.drive(
AlignmentTween(
begin: _dragAlignment,end: Alignment.center,);
// Calculate the velocity relative to the unit interval,[0,1],// used by the animation controller.
final unitsPerSecondX = pixelsPerSecond.dx / size.width;
final unitsPerSecondY = pixelsPerSecond.dy / size.height;
final unitsPerSecond = Offset(unitsPerSecondX,unitsPerSecondY);
final unitVelocity = unitsPerSecond.distance;
const spring = SpringDescription(
mass: 30,stiffness: 1,damping: 1,);
final simulation = SpringSimulation(spring,1,-unitVelocity);
_controller.animateWith(simulation);
}
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this);
_controller.addListener(() {
setState(() {
_dragAlignment = _animation.value;
});
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return GestureDetector(
onPanDown: (details) {
_controller.stop();
},onPanUpdate: (details) {
setState(() {
_dragAlignment += Alignment(
details.delta.dx / (size.width / 2),details.delta.dy / (size.height / 2),);
});
},onPanEnd: (details) {
_runAnimation(details.velocity.pixelsPerSecond,size);
},child: Align(
alignment: _dragAlignment,child: Card(
child: widget.child,);
}
}
我正在尝试设置DraggableCard()除位置以外的其他属性的动画;具体来说,我想基于水平拖动来动态更改其旋转度和不透明度。
为此,我尝试获取_dragAlignment的值,以便可以将其提供给Transform.rotate(),但该值对应于一个坐标,我只需要读取x的值坐标。
换句话说,我需要从与_dragAlignment对应的Alignment(x,y)类中提取X值。我尝试了很多事情,但没有任何效果。
我在这里和其他地方搜索了解决方案,但找不到任何帮助,也许我不是在问正确的问题。
很抱歉,这是一个愚蠢的问题,还是以前曾有人问过。
解决方法
我认为您可以做类似的事情,
<ReportCard>
<ReportIcon src={report.marker_icon} />
<ReportH2>{report.id}</ReportH2>
<ReportP>Officer will perform a Quick search of Valid Driver's License and any signs of Intoxication. </ReportP>
</ReportCard>
希望有效!
,感谢Shri Hari的帮助:)
我通过清除解决了我的问题
var xCoord = 0.0;
还清除了_dragAlignment并比使用
child: Transform.rotate(
angle: -_dragAlignment.x/200
直接在GestureDetector()中。
我还不得不在onPanUpdate中编辑值,因为看起来它不再拖动了,但是您只需要增加details.delta.dx ...
赞!
return GestureDetector(
onPanDown: (details) {
_controller.stop();
},onPanUpdate: (details) {
//print(_dragAlignment);
setState(() {
_dragAlignment += Alignment(
details.delta.dx / (size.width / 300),// X drag sensitivity
details.delta.dy / (size.height / 9),//Y drag sensitivity
);
});
},onPanEnd: (details) {
_runAnimation(details.velocity.pixelsPerSecond,size);
},child: Align(
alignment: _dragAlignment,child: Transform.rotate(
angle: -_dragAlignment.x/200,child: Card(
child: widget.child,),)
),);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。