import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'unity_controller.dart'; /// Unity视图的Flutter封装 class UnityWidget extends StatefulWidget { /// 默认场景名称 final String defaultScene; /// Unity视图加载完成回调 final Function? onUnityViewCreated; /// Unity消息回调 final Function(String)? onUnityMessage; /// 构造函数 const UnityWidget({ Key? key, required this.defaultScene, this.onUnityViewCreated, this.onUnityMessage, }) : super(key: key); @override State createState() => _UnityWidgetState(); } class _UnityWidgetState extends State { // Unity控制器 final UnityController _unityController = UnityController(); // 是否正在加载 bool _isLoading = true; @override void initState() { super.initState(); // 加载默认场景 _loadDefaultScene(); } // 加载默认场景 Future _loadDefaultScene() async { setState(() { _isLoading = true; }); try { // 打开Unity默认场景 await _unityController.openUnityScene(widget.defaultScene); // 通知视图创建完成 if (widget.onUnityViewCreated != null) { widget.onUnityViewCreated!(); } } catch (e) { print('加载Unity场景失败: $e'); } finally { setState(() { _isLoading = false; }); } } @override Widget build(BuildContext context) { // 根据平台返回不同的视图 if (Theme.of(context).platform == TargetPlatform.iOS) { return _isLoading ? const Center(child: CircularProgressIndicator()) : const UiKitView( viewType: 'com.yourcompany.unity_flutter/unityview', creationParamsCodec: StandardMessageCodec(), ); } else { // 如果不是iOS平台,显示提示信息 return const Center( child: Text('此平台不支持Unity视图,请在iOS设备上运行。'), ); } } @override void dispose() { // 关闭Unity视图 _unityController.closeUnity(); super.dispose(); } }