如何平滑拖动小部件,使正方形的“尾巴”不可见?我简单解释一下。反馈属性负责在拖动时显示小部件。如果您使颜色在那里不可见,则在开始时会在屏幕上画一个手指,当手指停止时,会出现一个正方形。如果颜色没有被移除,那么当你的手指在屏幕上滑动时,方块也会移动,但是方块的“尾巴”,它是用不同的颜色制作的,将是可见的。这是该代码的一部分。
feedback: Container(
width: _width,
height: _height,
//ДВИЖЕНИЯ ПЛАВНЫЙ, НО ВИДЕН ШЛЕЙФ КВАДРАТА
color: Colors.green,
//ЕСЛИ РАСКОМЕНТИРОВАТЬ, ДВИЖЕНИЯ БУДУТ РЕЗКИМИ
//color: Colors.green.withOpacity(0.0),
),
如何解决这样的问题?接下来,完整的代码。
主要.dart
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Name App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Name Page'),
),
body: MyHomePage(),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
double _width;
double _height;
Offset _position;
String _str;
Color _color;
@override
void initState() {
super.initState();
_width = 100.0;
_height = 100.0;
_position = Offset(0.0, _height - 20);
_str = 'A';
_color = Colors.orangeAccent;
}
@override
void dispose() {
super.dispose();
}
void _f1() {
setState(() {
});
}
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Positioned(
left: _position.dx,
top: _position.dy - _height + 20,
child: Draggable(
//отображение виджета изначально
child: Container(
width: _width,
height: _height,
color: _color,
alignment: Alignment.center,
child: Text(
_str,
style: TextStyle(
fontSize: 18,
color: Colors.white,
fontWeight: FontWeight.w600,
),
),
),
//отображение виджета во время перетаскивания
feedback: Container(
width: _width,
height: _height,
//ДВИЖЕНИЯ ПЛАВНЫЙ, НО ВИДЕН ШЛЕЙФ КВАДРАТА
color: Colors.green,
//ЕСЛИ РАСКОМЕНТИРОВАТЬ, ДВИЖЕНИЯ БУДУТ РЕЗКИМИ
//color: Colors.green.withOpacity(0.0),
),
//вызывается, когда виджет перетаскивается на DropTarget
//DropTarget ПРИНЯЛ виджет
onDragCompleted: () {
setState(() {
});
},
//вызывается, когда виджет перетаскивается на DropTarget
//DropTarget НЕ ПРИНЯЛ виджет
//виджет отбрасывается
onDraggableCanceled: (Velocity velocity, Offset offset) {
setState(() {
_position = offset;
});
},
//вызывается, когда виджет начинают перетаскивать
onDragStarted: () {
setState(() {
});
},
//вызывается, когда виджет перетаскивается на DropTarget
//содержит скорость и смещение
onDragEnd: (DraggableDetails details) {
setState(() {
});
},
),
),
],
);
}
}
相反,您的意思不是轨迹,而是初始小部件在拖动过程中可见的事实。
为了:
动作并不突然。它们完全一样,只是颜色是完全透明的。
好吧,为了让小部件在拖动时不会保留,添加:
您的示例的结果: