Flutter DragTable和DragTarget,在DragTarget中接受DragTable后,如何构建小部件?
我正在用颤振构建一个简单的游戏, 我试过下面的代码, 在dragTarget运行onAccept函数后调用定位小部件…真的不知道为什么不构建小部件 代码Flutter DragTable和DragTarget,在DragTarget中接受DragTable后,如何构建小部件?,flutter,dart,draggable,Flutter,Dart,Draggable,我正在用颤振构建一个简单的游戏, 我试过下面的代码, 在dragTarget运行onAccept函数后调用定位小部件…真的不知道为什么不构建小部件 代码 Positioned( bottom: 0, child: DragTarget( onWillAccept: (data){ print(data); return true;
Positioned(
bottom: 0,
child: DragTarget(
onWillAccept: (data){
print(data);
return true;
},
onAccept: (String value) {
print(caughtValue);
//HERE IS THE THING I WANT TO BUILD
Positioned(
child: Container(
width: 50,
height: 50,
child: Center(
child: Text('data'),
),
),
);
setState(() {
caughtValue = value;
});
},
如果您能提供帮助,我将不胜感激。您可以复制粘贴并运行下面的完整代码
您可以使用
可见性
包裹定位
并将其放在堆栈下
当
onAccept
更改可见时
为true
代码片段
Stack(
alignment: Alignment.center,
children: <Widget>[
Draggable(
feedback: Text('draging'),
child: Text('drag me'),
),
Positioned(
top: 30,
child: DragTarget(
onAccept: (data) {
print(" onAccept");
setState(() {
isVisible = true;
targetText = "data";
});
},
...
Visibility(
visible: isVisible,
child: Positioned(
top: 450,
...
堆栈(
对齐:对齐.center,
儿童:[
拖拉的(
反馈:文本(“拖动”),
子项:文本(“拖动我”),
),
定位(
前30名,
儿童:DragTarget(
onAccept:(数据){
打印(“onAccept”);
设置状态(){
isVisible=true;
targetText=“数据”;
});
},
...
可见度(
可见:isVisible,
孩子:定位(
排名:450,
...
工作演示
完整代码
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new Scaffold(
appBar: new AppBar(
title: new Text("DraggableDemo"),
),
body: Drag2TargetPage()),
);
}
}
bool isVisible = false;
class Drag2TargetPage extends StatefulWidget {
@override
_Drag2TargetPageState createState() => _Drag2TargetPageState();
}
class _Drag2TargetPageState extends State<Drag2TargetPage> {
var targetText = "Target";
@override
Widget build(BuildContext context) {
return ConstrainedBox(
constraints: BoxConstraints.expand(),
child: Stack(
alignment: Alignment.center,
children: <Widget>[
Draggable(
feedback: Text('draging'),
child: Text('drag me'),
//data: "123"
),
Positioned(
top: 30,
child: DragTarget(
onWillAccept: (data) {
print("data = $data onWillAccept");
return true;
},
onAccept: (data) {
print(" onAccept");
setState(() {
isVisible = true;
targetText = "data";
});
},
onLeave: (data) {
print("data = $data onLeave");
},
builder: (context, candidateData, rejectedData) {
return Container(
width: 150.0,
height: 150.0,
color: Colors.blue[500],
child: Center(
child: Text(targetText),
),
);
},
)),
Visibility(
visible: isVisible,
child: Positioned(
top: 450,
child: Container(
width: 40,
height: 20,
child: Center(
child: Text('show'),
),
),
),
)
],
),
);
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(新的MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“颤振演示”,
主题:新主题数据(
主样本:颜色。蓝色,
),
家:新脚手架(
appBar:新的appBar(
标题:新文本(“DragableDemo”),
),
正文:Drag2TargetPage()),
);
}
}
bool isVisible=false;
类Drag2TargetPage扩展StatefulWidget{
@凌驾
_Drag2目标妊娠期createState()=>\u Drag2目标妊娠期();
}
类_Drag2目标妊娠期扩展状态{
var targetText=“Target”;
@凌驾
小部件构建(构建上下文){
返回约束框(
约束:BoxConstraints.expand(),
子:堆栈(
对齐:对齐.center,
儿童:[
拖拉的(
反馈:文本(“拖动”),
子项:文本(“拖动我”),
//数据:“123”
),
定位(
前30名,
儿童:DragTarget(
onWillAccept:(数据){
打印(“数据=$data onWillAccept”);
返回true;
},
onAccept:(数据){
打印(“onAccept”);
设置状态(){
isVisible=true;
targetText=“数据”;
});
},
onLeave:(数据){
打印(“数据=$data onLeave”);
},
生成器:(上下文、候选数据、拒绝数据){
返回容器(
宽度:150.0,
高度:150.0,
颜色:颜色。蓝色[500],
儿童:中心(
子:文本(targetText),
),
);
},
)),
可见度(
可见:isVisible,
孩子:定位(
排名:450,
子:容器(
宽度:40,
身高:20,
儿童:中心(
子项:文本('show'),
),
),
),
)
],
),
);
}
}
创建了定位的
小部件,但它不知道将其放置在渲染树中的何处。据我所知,当拖动完成时,应该有一个小部件,它是您绘制的方形轮廓。如果是,您可以共享更多代码,以便我可以帮助您喜欢将其放置在何处。哦,这是代码[]我真的不知道小部件树肯定会对此进行更多的研究。谢谢你的帮助!谢谢!!!还有没有办法不预先构建容器我真的需要在dragtarget的onaccept中构建小部件,因为我正在尝试创建一个简单的游戏。你必须构建静态或动态的树,就像返回列表一样getList,您可以将新的小部件添加到widgetList和SetState。很高兴提供帮助。如果有帮助,请将此标记为答案。谢谢。