Flutter DragTable和DragTarget,在DragTarget中接受DragTable后,如何构建小部件?

Flutter DragTable和DragTarget,在DragTarget中接受DragTable后,如何构建小部件?,flutter,dart,draggable,Flutter,Dart,Draggable,我正在用颤振构建一个简单的游戏, 我试过下面的代码, 在dragTarget运行onAccept函数后调用定位小部件…真的不知道为什么不构建小部件 代码 Positioned( bottom: 0, child: DragTarget( onWillAccept: (data){ print(data); return true;

我正在用颤振构建一个简单的游戏, 我试过下面的代码, 在dragTarget运行onAccept函数后调用定位小部件…真的不知道为什么不构建小部件

代码

      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。很高兴提供帮助。如果有帮助,请将此标记为答案。谢谢。