Flutter / 为什么当我点击我的图片时我的模型没有更新?

问题描述 投票:0回答:1

我在 Flutter 中使用模型查看器库,我正在制作一个 3D 模型列表,所以我想在单击图像时更改模型我尝试制作一个带有设置状态的手势检测器,当我单击它时它将更改为另一个型号,但我不知道为什么它不起作用 我能得到一些帮助吗?

代码:

main() async {
  runApp(MyWidget());
}


class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}





class _MyWidgetState extends State<MyWidget> {


  String _modelUrl = "assets/models/model1.glb";

  void changeModelUrl() {
    print("func change");
    setState(() {
      _modelUrl = "assets/models/model2.glb";
    });
  }


@override
Widget build(BuildContext context) {
    
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.black,
          title: Text('3DGallery'),

        ),
        body: Row(
          children: [
            // ListView de trois boutons
            Container(
              width: 120,
              child: ListView(
                children: [
                  Container(
                    decoration: BoxDecoration(
                      border: Border.all(color: Colors.black)
                    ),
                    child: GestureDetector(
                      onTap: () {
                        print("tapmasque");
                        changeModelUrl();
                      },
                      child: Image.asset(
                        'assets/poster/masquesenegal.webp',
                        width: 150,
                      ),
                    ),
                  ),
                  Container(
                    decoration: BoxDecoration(
                        border: Border.all(color: Colors.black)
                    ),
                    child: GestureDetector(
                      onTap: () {
                        print("tapradio");
                        changeModelUrl();
                        print(_modelUrl);

                      },
                      child: Image.asset(
                        'assets/poster/radio.webp',
                        width: 150,
                      ),
                    ),
                  ),
                  Container(
                    decoration: BoxDecoration(
                        border: Border.all(color: Colors.black)
                    ),
                    child: GestureDetector(
                      onTap: () {
                        print("tapdodo");
                        changeModelUrl();
                      },
                      child: Image.asset(
                        'assets/poster/dodo.webp',
                        width: 150,
                      ),
                    ),
                  ),
                ],
              ),
            ),
            Expanded(
              child: ModelViewer(
                id: "oeuvres3D",
                //src: 'assets/models/poste_recepteur.glb',
                src: _modelUrl,
                skyboxImage: "https://i.ibb.co/2gy0xVv/Shutterstock-1157860666.jpg",
                //skyboxImage: "https://modelviewer.dev/shared-assets/environments/spruit_sunrise_1k_HDR.hdr",
                exposure: 3,
                ar: true,
                arModes: ['scene-viewer', 'webxr', 'quick-look'],
                autoRotate: true,
                cameraControls: true,
                disableZoom: true,
                relatedJs: js,
                innerModelViewerHtml: _html2,
                overwriteNodeValidatorBuilder: myNodeValidatorBuilder,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

我试着把 setstate 直接放到 gesturedetector 里,同样的问题

flutter dart state setstate gesturedetector
1个回答
0
投票

那是因为包在

didUpdateWidget
方法中没有做任何事情:https://github.com/drydart/model_viewer.dart/blob/master/lib/src/model_viewer.dart#L114

你可以做的是使用

Key
强制重新创建小部件,就像这样:

             ModelViewer(
                key: ValueKey(_modelUrl),
                id: "oeuvres3D",
                src: _modelUrl,

© www.soinside.com 2019 - 2024. All rights reserved.