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, но я не знаю, где. Как мне решить эту проблему?


Ответы (0 шт):