Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/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 颤振-在设置状态之前保存多个小部件转换_Flutter_Dart_Matrix_Mobile_Pinchzoom - Fatal编程技术网

Flutter 颤振-在设置状态之前保存多个小部件转换

Flutter 颤振-在设置状态之前保存多个小部件转换,flutter,dart,matrix,mobile,pinchzoom,Flutter,Dart,Matrix,Mobile,Pinchzoom,我有一个包含多个Matrix手势容器的堆栈,其中包含可以拖动、收缩、缩放和旋转的图像。我想将每个容器的状态保存在它的位置和形状中,因为在使用setState进行一点更改后,所有内容都会返回到原始位置。 图像的所有信息都位于具有特定对象类型的列表中。 以下是显示图像的代码片段: class NewOutfitState extends State<NewOutfit> { List<DisplayGarment> garmentsList; @ov

我有一个包含多个Matrix手势容器的堆栈,其中包含可以拖动、收缩、缩放和旋转的图像。我想将每个容器的状态保存在它的位置和形状中,因为在使用setState进行一点更改后,所有内容都会返回到原始位置。 图像的所有信息都位于具有特定对象类型的列表中。 以下是显示图像的代码片段:

class NewOutfitState extends State<NewOutfit> {
    List<DisplayGarment> garmentsList;
    
    @override
    Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
        title: new Text("New"), 
        body:  new Container(
        child:MyList(myList: garmentsList, canvasSize: realCanvas,);
        )
    }
}
class MyListState extends State<MyList>{
    List<DisplayGarment> myList;
    double realCanvas;
    bool flag=false;
    int touch=0;
    @override
    void initState() {
        super.initState();
        myList=widget.myList;
        realCanvas = widget.canvasSize;
    }

    @override
    Widget build(BuildContext context) {
        return Stack(
        children: getList(),
        );
    }

    List<Widget> getList(){
        List<Widget> listWidget=[];
        
        for(int i=0;i<myList.length;i++) {
        final ValueNotifier<Matrix4> notifier1= ValueNotifier(Matrix4.identity());
        DisplayGarment _garments = myList[i];
        
        listWidget.add( 
            MatrixGestureDetector(
            key: Key(i.toString()),
            onMatrixUpdate: (m, tm, sm, rm) { 
            notifier1.value = m;
            },
            child: AnimatedBuilder(
            animation: notifier1,
            builder: (ctx, child) {
                return Transform(
                transform: notifier1.value,
                child: Stack(
                    children: <Widget>[
                    Container(          
                        padding: EdgeInsets.all(4),
                        alignment: Alignment(0, -0.5),
                        child: 
                            Container(   
                            padding: EdgeInsets.all(0),  
                            height: imgHeigh,
                            width: imgWidth,
                            child:
                                DottedBorder(
                                color: Colors.transparent,
                                strokeWidth: 0,
                                child: Center(
                                    child: CachedNetworkImage(
                                    imageUrl: 
                                    'https://fashiers.com/garments_img/'+imgUrl,
                                    height: imgHeigh,
                                    width: imgWidth,
                                )),
                            );   
                        ,)
                    )
                ],),);},),
            )
        );
    }
    return listWidget;
}
类newOutfightState扩展状态{
列表garmentsList;
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“新”),
主体:新容器(
子项:MyList(MyList:garmentsList,canvasSize:realCanvas,);
)
}
}
类MyListState扩展了状态{
列出我的清单;
双真实画布;
布尔标志=假;
int-touch=0;
@凌驾
void initState(){
super.initState();
myList=widget.myList;
realCanvas=widget.canvasSize;
}
@凌驾
小部件构建(构建上下文){
返回堆栈(
子项:getList(),
);
}
List getList(){
List listWidget=[];

对于(int i=0;i对于第一部分,您不应该将
notifier1
初始化放在build函数中。这就是为什么每次使用
setStatus
时,您的位置都会重置。该部分应该在
initState()
中初始化,这意味着您应该将所有位置值保留在此类中。(例如,
列表

第二部分,为
服装
编制索引可能是本能的解决方案。通过以下方式显示/隐藏边框:

child: _selectedIndex == i ?
  // Widget with border
  : //Widget without border

并在Matrix Update()中设置
\u selectedIndex

非常感谢,我将尝试使用通知程序和列表的解决方案。我唯一没有得到的是_selectedIndex是一个int-var还是一个小部件?它应该是矩阵手势的子元素?在上面的代码中,
_selectedIndex
是一个int-var并且可以在类级别定义。因为我看到了关于getList()函数中使用ode>i,并尝试重用它。您可以定义自己的索引方法。