Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振有多个独立的DragTarget小部件_Flutter_Widget - Fatal编程技术网

Flutter 颤振有多个独立的DragTarget小部件

Flutter 颤振有多个独立的DragTarget小部件,flutter,widget,Flutter,Widget,我已经和弗利特一起工作了几个月,所以我还在学习。我发现了一个类似的例子,我正在根据需要进行调整 我需要在屏幕上有多个DragTarget小部件,当我将一个形状放入其中时,我不希望所有的小部件都只更新我放置形状的那个 霍姆·达特 class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(

我已经和弗利特一起工作了几个月,所以我还在学习。我发现了一个类似的例子,我正在根据需要进行调整

我需要在屏幕上有多个DragTarget小部件,当我将一个形状放入其中时,我不希望所有的小部件都只更新我放置形状的那个

霍姆·达特

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(APP_BAR_TITLE),
      ),
      floatingActionButton: FloatingActionButton.extended(
        onPressed: () {
          Provider.of<Data>(context).initializeDraggableList();
          Provider.of<Data>(context).changeSuccessDrop(false);
        },
        elevation: 20.0,
        label: Text('Reset'),
      ),
      body: SingleChildScrollView(
        child: Container(
          margin: EdgeInsets.only(top: 12.0),
          alignment: Alignment.center,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              CardStackWidget(),
              Padding(
                padding: const EdgeInsets.all(16.0),
                child: DragTargetWidget(),
              ),
              Padding(
                padding: const EdgeInsets.all(16.0),
                child: DragTargetWidget(),
              ),
              Padding(
                padding: const EdgeInsets.all(16.0),
                child: DragTargetWidget(),
              )
            ],
          ),
        ),
      ),
    );
  }
}
类主页扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(应用程序标题),
),
floatingActionButton:floatingActionButton.extended(
已按下:(){
Provider.of(context.initializeDraggableList();
Provider.of(context).changesuccesdrop(false);
},
标高:20.0,
标签:文本(“重置”),
),
正文:SingleChildScrollView(
子:容器(
边距:仅限边缘集(顶部:12.0),
对齐:对齐.center,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
CardStackWidget(),
填充物(
填充:常数边集全部(16.0),
子项:DragTargetWidget(),
),
填充物(
填充:常数边集全部(16.0),
子项:DragTargetWidget(),
),
填充物(
填充:常数边集全部(16.0),
子项:DragTargetWidget(),
)
],
),
),
),
);
}
}
DragTargetWidget.省道

class DragTargetWidget extends StatelessWidget {


  @override
  Widget build(BuildContext context) {
    return DragTarget(onWillAccept: (data) {
      return true;
    }, onAccept: (CardItem data) {
      if (Provider.of<Data>(context).itemsList.length >= 1) {
        Provider.of<Data>(context).removeLastItem();
        Provider.of<Data>(context).changeSuccessDrop(true);
        Provider.of<Data>(context).changeAcceptedData(data);
      }
    }, builder: (context, List<CardItem> cd, rd) {
      if (Provider.of<Data>(context).isSuccessDrop) {
        return Padding(
          padding: const EdgeInsets.all(25.0),
          child: Stack(
            children: buildTargetList(Provider.of<Data>(context).getAcceptedData),
          ),
        );
      } else {
        return Padding(
          padding: const EdgeInsets.all(25.0),
          child: DottedBorder(
            color: Colors.black,
            gap: 3,
            strokeWidth: 1,
            child: Container(
                height: 100.0,
                width: 100.0,
                color: Colors.grey[400],
                child: Card(
                  shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(5)),
                  color: Colors.grey[400],
                  child: Center(
                    child: Text(
                      DROP_ITEMS_HERE,
                      style: TextStyle(color: Colors.black, fontSize: 22.0),
                    ),
                  ),
                )),
          ),
        );
      }
    });
  }

  List<Widget> buildTargetList(CardItem cardItem) {
    List<Widget> targetList = [];
    targetList.add(
      DottedBorder(
        gap: 3,
        strokeWidth: 1,
        color: Colors.black,
        child: Container(
          height: 100.0,
          width: 100.0,
          child: Card(
            shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(10.0)),
            color: cardItem.cardColor,
            child: Center(
                child: Text(
              '${cardItem.content}',
              style: TextStyle(fontSize: 25.0, color: WHITE_COLOR),
            )),
          ),
        ),
      ),
    );
    return targetList;
  }
}
类DragTargetWidget扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回DragTarget(onWillAccept:(数据){
返回true;
},onAccept:(心脏数据){
if(Provider.of(context).itemsList.length>=1){
Provider.of(context.removeLastItem();
Provider.of(context).changesuccesdrop(true);
Provider.of(上下文).changeAcceptedData(数据);
}
},生成器:(上下文,列表cd,rd){
if(Provider.of(context).issucessdrop){
返回填充(
填充:常数边集全部(25.0),
子:堆栈(
子项:buildTargetList(Provider.of(context.getAcceptedData),
),
);
}否则{
返回填充(
填充:常数边集全部(25.0),
孩子:DottedBorder(
颜色:颜色,黑色,
差距:3,
冲程宽度:1,
子:容器(
高度:100.0,
宽度:100.0,
颜色:颜色。灰色[400],
孩子:卡片(
形状:圆形矩形边框(
边界半径:边界半径。圆形(5)),
颜色:颜色。灰色[400],
儿童:中心(
子:文本(
把物品放在这里,
样式:TextStyle(颜色:Colors.black,fontSize:22.0),
),
),
)),
),
);
}
});
}
列表构建目标列表(CardItem CardItem){
列表targetList=[];
targetList.add(
点边界(
差距:3,
冲程宽度:1,
颜色:颜色,黑色,
子:容器(
高度:100.0,
宽度:100.0,
孩子:卡片(
形状:圆形矩形边框(
边界半径:边界半径。圆形(10.0)),
颜色:cardItem.cardColor,
儿童:中心(
子:文本(
“${cardItem.content}”,
样式:TextStyle(字体大小:25.0,颜色:白色),
)),
),
),
),
);
返回目标列表;
}
}

在任何DropTarget形状中删除其中一个形状将更新所有形状。我不确定这是因为我对所有事情都使用相同的列表,还是因为其他原因