Flutter inside android service
Я хочу создать свою клавиатуру. Я создал сервис, унаследовавшись от InputMethodService и создал FlutterView так:
engine = FlutterEngine(this)
val surface = FlutterSurfaceView(this)
view = FlutterView(this,surface)
view.attachToFlutterEngine(engine)
engine.dartExecutor.executeDartEntrypoint(
DartExecutor.DartEntrypoint(
FlutterInjector.instance().flutterLoader().findAppBundlePath(),
"keyboard"
)
)
controlChannel = MethodChannel(engine.dartExecutor.binaryMessenger, "control")
engine.serviceControlSurface.attachToService(this, null, true)
engine.platformViewsController.attachToView(view)
и возвращаю view внутри LinearLayout в onCreateInputView Макет, если нужен
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/container"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
Container я нахожу в коде и добавляю view методом addView
Со стороны flutter, я создал StatefullWidget, который обновляет число по таймеру. Виджет работает внутри FlutterActivity, когда я добавляю его в дерево виджетов и запускаю отладку. Когда я запускаю саму клавиатуру, число перестаёт перерисовываться и я вижу только 0. Это пример кода, я пробовал использовать MaterialApp и Scaffold тоже.
class StrangeKey extends StatefulWidget {
const StrangeKey({super.key});
@override
State<StrangeKey> createState() => _StrangeKeyState();
}
class _StrangeKeyState extends State<StrangeKey> {
int digit = 0;
Timer? timer;
@override
void initState() {
timer = Timer.periodic(const Duration(seconds: 1), (_) {
digit += 1;
if (digit == 10) digit = 0;
print("keyboard: $digit");
setState(() {});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Expanded(child: Center(child: Text(digit.toString())));
}
}
@pragma("vm:entry-point")
void keyboard() {
runApp(const StrangeKey());
}
у меня мало опыта работы с FlutterView и мой код, вероятно, плох. Скорее всего, ошибка в коде на kotlin, но я не знаю, где. Как мне решить эту проблему?