我在Ffltter中使用模型查看器库,我正在制作3D模型的列表,所以我想要更改模型当我单击图像时,我try 使用设置状态的手势检测器,当我单击它时,它会更改为另一个模型,但我不知道为什么它不起作用 能帮我个忙吗?

代码:

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,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

我try 将setState直接放入手势检测器,同样的问题

推荐答案

这是因为该包不执行didUpdateWidget方法中的任何操作:https://github.com/drydart/model_viewer.dart/blob/master/lib/src/model_viewer.dart#L114

您可以使用Key强制重新创建Widget,如下所示:

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

Flutter相关问答推荐

flutter:如何将字体大小设置得更大(更大)

Flutter:如何从Bottom Navigator中删除此内容

无法让Riverpod Stream发出新值

Android NFC未收到空的NFC标签

为什么Flutter 翼扩展卡有上下边框?

如何处理Flutter Riverpod异步通知器中的状态和数据库

我想创建一个可滚动的堆叠列表项,每个项都朝向屏幕

当我转到其他屏幕并按下后退按钮时,屏幕将不会刷新

如何使listview.builder在筛选列表后实时更新

如何在点击查看措辞下方添加句子?

如何手动将 FirebaseAuth 用户邮箱验证状态设置为 true

flutter Listview构建器溢出

为什么我的图标的一半在定位小部件中消失了?

自定义绘画未显示 - Flutter

这是使用导航功能处理从一页到另一页的移动的最佳方式

如何流畅切换画面?

为什么容器会填满整个空间?

无法列出 com.facebook.android:facebook-login -Facebook 登录问题的版本

Flutter 小部件中的视图和逻辑分离

带有 Dismissible 和 Provider (NotifyListener) 的笨拙动画