first commit
This commit is contained in:
33
lib/filament_controller.dart
Normal file
33
lib/filament_controller.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
abstract class FilamentController {
|
||||
void onFilamentViewCreated(int id);
|
||||
Future initialize();
|
||||
Future loadSkybox(String skyboxPath, String lightingPath);
|
||||
Future loadGlb(String path);
|
||||
}
|
||||
|
||||
class MimeticFilamentController extends FilamentController {
|
||||
late int _id;
|
||||
late MethodChannel _channel;
|
||||
|
||||
@override
|
||||
void onFilamentViewCreated(int id) async {
|
||||
_id = id;
|
||||
_channel = MethodChannel("mimetic.app/filament_view_$id");
|
||||
}
|
||||
|
||||
@override
|
||||
Future initialize() async {
|
||||
await _channel.invokeMethod("initialize");
|
||||
}
|
||||
|
||||
@override
|
||||
Future loadSkybox(String path) {
|
||||
throw Exception();
|
||||
}
|
||||
|
||||
Future loadGlb(String path) {
|
||||
throw Exception();
|
||||
}
|
||||
}
|
||||
13
lib/mimetic_filament.dart
Normal file
13
lib/mimetic_filament.dart
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class MimeticFilament {
|
||||
static const MethodChannel _channel = MethodChannel('mimetic_filament');
|
||||
|
||||
static Future<String?> get platformVersion async {
|
||||
final String? version = await _channel.invokeMethod('getPlatformVersion');
|
||||
return version;
|
||||
}
|
||||
}
|
||||
19
lib/mimetic_filament_plugin.dart
Normal file
19
lib/mimetic_filament_plugin.dart
Normal file
@@ -0,0 +1,19 @@
|
||||
// You have generated a new plugin project without
|
||||
// specifying the `--platforms` flag. A plugin project supports no platforms is generated.
|
||||
// To add platforms, run `flutter create -t plugin --platforms <platforms> .` under the same
|
||||
// directory. You can also find a detailed instruction on how to add platforms in the `pubspec.yaml` at https://flutter.dev/docs/development/packages-and-plugins/developing-packages#plugin-platforms.
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class MimeticFilamentPlugin {
|
||||
static const MethodChannel _channel = MethodChannel('mimetic_filament');
|
||||
|
||||
static Future<String?> get platformVersion async {
|
||||
final String? version = await _channel.invokeMethod('getPlatformVersion');
|
||||
return version;
|
||||
}
|
||||
|
||||
static void initialize() {}
|
||||
}
|
||||
58
lib/view/filament_view.dart
Normal file
58
lib/view/filament_view.dart
Normal file
@@ -0,0 +1,58 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
import '../../filament_controller.dart';
|
||||
import 'filament_view_platform.dart';
|
||||
|
||||
class FilamentView extends FilamentViewPlatform {
|
||||
static const FILAMENT_VIEW_ID = 'mimetic.app/filament_view';
|
||||
|
||||
@override
|
||||
Widget buildView(
|
||||
int creationId,
|
||||
FilamentViewCreatedCallback onFilamentViewCreated,
|
||||
) {
|
||||
switch (defaultTargetPlatform) {
|
||||
case TargetPlatform.android:
|
||||
return PlatformViewLink(
|
||||
viewType: FILAMENT_VIEW_ID,
|
||||
surfaceFactory:
|
||||
(BuildContext context, PlatformViewController controller) {
|
||||
return AndroidViewSurface(
|
||||
controller: controller as AndroidViewController,
|
||||
gestureRecognizers: const <
|
||||
Factory<OneSequenceGestureRecognizer>>{},
|
||||
hitTestBehavior: PlatformViewHitTestBehavior.opaque,
|
||||
);
|
||||
},
|
||||
onCreatePlatformView: (PlatformViewCreationParams params) {
|
||||
return PlatformViewsService.initSurfaceAndroidView(
|
||||
id: params.id,
|
||||
viewType: FILAMENT_VIEW_ID,
|
||||
layoutDirection: TextDirection.ltr,
|
||||
creationParams: {},
|
||||
creationParamsCodec: StandardMessageCodec(),
|
||||
)
|
||||
..addOnPlatformViewCreatedListener((int id) {
|
||||
onFilamentViewCreated(id);
|
||||
params.onPlatformViewCreated(id);
|
||||
})
|
||||
..create();
|
||||
},
|
||||
);
|
||||
case TargetPlatform.iOS:
|
||||
return UiKitView(
|
||||
viewType: FILAMENT_VIEW_ID,
|
||||
onPlatformViewCreated: (int id) {
|
||||
onFilamentViewCreated(id);
|
||||
},
|
||||
);
|
||||
default:
|
||||
return Text(
|
||||
'$defaultTargetPlatform is not yet implemented by Filament plugin.');
|
||||
}
|
||||
}
|
||||
}
|
||||
22
lib/view/filament_view_platform.dart
Normal file
22
lib/view/filament_view_platform.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:mimetic_filament/view/filament_view.dart';
|
||||
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
|
||||
import '../../filament_controller.dart';
|
||||
|
||||
typedef void FilamentViewCreatedCallback(int id);
|
||||
|
||||
abstract class FilamentViewPlatform extends PlatformInterface {
|
||||
FilamentViewPlatform() : super(token: _token);
|
||||
|
||||
static final Object _token = Object();
|
||||
static FilamentViewPlatform _instance = FilamentView();
|
||||
|
||||
static FilamentViewPlatform get instance => _instance;
|
||||
|
||||
Widget buildView(
|
||||
int creationId,
|
||||
FilamentViewCreatedCallback onFilamentViewCreated,
|
||||
) {
|
||||
throw UnimplementedError('buildView() has not been implemented.');
|
||||
}
|
||||
}
|
||||
25
lib/view/filament_widget.dart
Normal file
25
lib/view/filament_widget.dart
Normal file
@@ -0,0 +1,25 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
import '../filament_controller.dart';
|
||||
import 'filament_view_platform.dart';
|
||||
|
||||
int _nextFilamentCreationId = 0;
|
||||
|
||||
class FilamentWidget extends StatefulWidget {
|
||||
final FilamentController controller;
|
||||
|
||||
const FilamentWidget({Key? key, required this.controller}) : super(key: key);
|
||||
|
||||
@override
|
||||
_FilamentWidgetState createState() => _FilamentWidgetState();
|
||||
}
|
||||
|
||||
class _FilamentWidgetState extends State<FilamentWidget> {
|
||||
final _viewId = _nextFilamentCreationId++;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return FilamentViewPlatform.instance
|
||||
.buildView(_viewId, widget.controller.onFilamentViewCreated);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user