我在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直接放入手势检测器,同样的问题