Skip to content

Commit 2b288d5

Browse files
committed
Fix controller singleton
1 parent 67eab4d commit 2b288d5

File tree

7 files changed

+39
-13
lines changed

7 files changed

+39
-13
lines changed

android/src/main/kotlin/com/xraph/plugin/flutter_unity_widget/DataStreamHandler.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ enum class DataStreamEventTypes {
3030
OnUnityPlayerQuited,
3131
OnUnitySceneLoaded,
3232
OnUnityMessage,
33+
OnViewAttached,
34+
OnViewDetached,
3335
}
3436

3537
class DataStreamHandler: EventChannel.StreamHandler {

android/src/main/kotlin/com/xraph/plugin/flutter_unity_widget/FlutterUnityWidgetController.kt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -246,18 +246,23 @@ class FlutterUnityWidgetController(
246246
UnityPlayerUtils.addUnityViewToGroup(view)
247247
UnityPlayerUtils.focus()
248248

249-
attached = true
250-
251249
if (UnityPlayerUtils.controllers.size >= 2) {
252-
for (controller in UnityPlayerUtils.controllers.subList(0, UnityPlayerUtils.controllers.size - 1)) {
250+
for (controller in UnityPlayerUtils.controllers.values) {
253251
if (controller.attached) {
254252
controller.detach()
255253
}
256254
}
257255
}
256+
attached = true
257+
258258

259259
Handler(Looper.getMainLooper()).post {
260-
methodChannel.invokeMethod("events#onViewAttached", null)
260+
DataStreamEventNotifier.notifier.onNext(
261+
DataStreamEvent(
262+
DataStreamEventTypes.OnViewAttached.name,
263+
viewId,
264+
)
265+
)
261266
}
262267
}
263268

@@ -305,7 +310,12 @@ class FlutterUnityWidgetController(
305310

306311
private fun detach() {
307312
Handler(Looper.getMainLooper()).post {
308-
methodChannel.invokeMethod("events#onViewDetached", null)
313+
DataStreamEventNotifier.notifier.onNext(
314+
DataStreamEvent(
315+
DataStreamEventTypes.OnViewDetached.name,
316+
viewId,
317+
)
318+
)
309319
}
310320
attached = false
311321
}

lib/src/helpers/types.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ class EventDataPayload {
8888
case 'OnViewReattached':
8989
eventType = UnityEventTypes.OnViewReattached;
9090
break;
91+
case 'OnViewAttached':
92+
eventType = UnityEventTypes.OnViewAttached;
93+
break;
94+
case 'OnViewDetached':
95+
eventType = UnityEventTypes.OnViewDetached;
96+
break;
9197
}
9298

9399
return EventDataPayload(

lib/src/io/device_method.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,12 @@ class MethodChannelUnityWidget extends UnityWidgetPlatform {
8787
.add(UnitySceneLoadedEvent(0, SceneLoaded.fromMap(event.data)));
8888
break;
8989
case UnityEventTypes.OnViewAttached:
90-
_unityStreamController.add(UnityAttachedEvent(0, event.data));
90+
_unityStreamController
91+
.add(UnityAttachedEvent(int.parse((event.data as String).split('-').last), event.data));
9192
break;
9293
case UnityEventTypes.OnViewDetached:
93-
_unityStreamController.add(UnityDetachedEvent(0, event.data));
94+
_unityStreamController
95+
.add(UnityDetachedEvent(int.parse((event.data as String).split('-').last), event.data));
9496
break;
9597
case UnityEventTypes.OnUnityPlayerReInitialize:
9698
case UnityEventTypes.OnViewReattached:

lib/src/io/flutter_unity_device_method.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,15 @@ class FlutterUnityMethodChannel extends FlutterUnityPlatform {
7070
_unityStreamController.add(UnityMessageEvent(0, payload.data));
7171
break;
7272
case UnityEventTypes.OnUnitySceneLoaded:
73-
_unityStreamController.add(
74-
UnitySceneLoadedEvent(0, SceneLoaded.fromMap(payload.data)));
73+
_unityStreamController.add(UnitySceneLoadedEvent(0, SceneLoaded.fromMap(payload.data)));
74+
break;
75+
case UnityEventTypes.OnViewAttached:
76+
_unityStreamController
77+
.add(UnityAttachedEvent(int.parse((payload.data as String).split('-').last), payload.data));
78+
break;
79+
case UnityEventTypes.OnViewDetached:
80+
_unityStreamController
81+
.add(UnityDetachedEvent(int.parse((payload.data as String).split('-').last), payload.data));
7582
break;
7683
case UnityEventTypes.OnUnityPlayerReInitialize:
7784
case UnityEventTypes.OnViewReattached:

lib/src/io/mobile_unity_widget_controller.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,12 @@ class MobileUnityWidgetController extends UnityWidgetController {
3232
int id, MobileUnityWidgetState unityWidgetState) async {
3333
await UnityWidgetPlatform.instance.init(id);
3434
FlutterUnityController.instance.lastUnityId = id;
35-
return MobileUnityWidgetController._(
35+
var controller = MobileUnityWidgetController._(
3636
unityWidgetState,
3737
unityId: id,
3838
);
39+
await UnityWidgetPlatform.instance.init(id);
40+
return controller;
3941
}
4042

4143
void _connectStreams(int unityId) {

lib/src/io/unity_widget.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,6 @@ class _UnityWidgetState extends State<UnityWidget> {
204204
widget.onUnityCreated!(controller);
205205
}
206206

207-
// if (widget.onUnityAttached != null)
208-
// widget.onUnityAttached!();
209-
210207
if (widget.printSetupLog) {
211208
log('*********************************************');
212209
log('** flutter unity controller setup complete **');

0 commit comments

Comments
 (0)