Можно ли использовать Jetpack Compose во Flutter, используя представления платформы?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Можно ли использовать Jetpack Compose во Flutter, используя представления платформы?

Сообщение Anonymous »


Я столкнулся с проблемой при интеграции Android Jetpack Compose во Flutter с использованием представления платформы, предоставляемого Flutter.

java.lang.NoSuchMethodError: нет виртуального метода setContent(Lkotlin/jvm/functions/Function0;)V в классе Landroidx/compose/ui/platform/ComposeView; или его суперклассы (объявление androidx.compose.ui.platform.ComposeView появляется в /data/app/~~jNPuLsqJ5chFROaeevr0TQ==/com.example.example-_A0JqLOSwN-L0KrftRNktw==/base.apk)

импортировать android.content.Context импортировать android.graphics.Color импортировать android.view.View импортировать android.view.ViewGroup импортировать android.widget.TextView импортировать androidx.compose.material3.Text импортировать androidx.compose.runtime.Composable импортировать androidx.compose.ui.platform.ComposeView импортировать androidx.constraintlayout.widget.ConstraintLayout импортировать androidx.constraintlayout.widget.ConstraintSet импортировать io.flutter.embedding.android.FlutterFragmentActivity импортировать io.flutter.embedding.engine.FlutterEngine импортировать io.flutter.plugin.common.StandardMessageCodec импортировать io.flutter.plugin.platform.PlatformView импортировать io.flutter.plugin.platform.PlatformViewFactory класс MainActivity: FlutterFragmentActivity() { переопределить удовольствие configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) флаттерДвигатель .platformViewsController .регистрация .registerViewFactory("flutter_native_example", MyComposeViewFactory()) } } класс MyComposeViewFactory: PlatformViewFactory(StandardMessageCodec.INSTANCE) { переопределить fun create(context: Context, viewId: Int, args: Any?): ПлатформаВью { val CreationParams = args as Map? вернуть MyComposeView (контекст, viewId, CreationParams) } } класс MyComposeView(контекст: Context, id: Int, CreationParams: Map?) : PlatformView { частное ограничениеLayout: ConstraintLayout частный val textView: TextView частный val composeView: ComposeView переопределить удовольствие getView(): View { ограничение возвратаLayout } в этом { ограничениеLayout = ConstraintLayout(контекст) textView = TextView(контекст) composeView = ComposeView(контекст) val layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) ограничениеLayout.layoutParams = LayoutParams val ограничениеSet = ConstraintSet() ограничениеSet.clone(constraintLayout) textView.id = View.generateViewId(); composeView.id = View.generateViewId(); ограничениеLayout.addView(textView) ограничениеLayout.addView(composeView) textView.text = "Привет из xml" textView.textSize = 30f textView.setTextColor(Color.BLUE) ограниченияSet.constrainWidth(textView.id,ConstraintSet.MATCH_CONSTRAINT); ограниченияSet.constrainHeight(textView.id,ConstraintSet.WRAP_CONTENT); ограничениеSet.connect(textView.id,ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT); ограничениеSet.connect(textView.id,ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT); ограничениеSet.connect(textView.id,ConstraintSet.TOP,ConstraintSet.PARENT_ID,ConstraintSet.TOP); ограничениеSet.connect(textView.id,ConstraintSet.BOTTOM,ConstraintSet.PARENT_ID,ConstraintSet.BOTTOM); ограничениеSet.applyTo(constraintLayout) composeView.setContent { МойКомпонироватьТекст() } } переопределить удовольствие располагать() {} } @Композитный весело MyComposeText() { Text(text = "Привет из сообщения") } уже добавлено в build.gradle

buildFeatures { сочинять правду } composeOptions { kotlinCompilerExtensionVersion '1.4.0' } Изначально я столкнулся с ошибкой java.lang.IllegalStateException: ViewTreeLifecycleOwner не найден.
Я нашел решение в этом вопросе: ссылка stackoverflow.com. Однако, когда я снова запустил приложение, я все равно получил ту же ошибку. Подумав, что это могла быть моя ошибка, я скопировал код из ссылки на упомянутый вопрос, но ошибка не исчезла.

Мой пример использования: В моем приложении есть вариант использования для отображения наложения при поступлении нового заказа в ресторан. Это предупреждение должно отображаться перед любым другим приложением, даже если основное приложение закрыто. Я уже разработал эту функциональность, используя пакет pub от pub.dev. Изучив код пакета, я внес изменения, чтобы адаптировать его к своим конкретным требованиям. Исходный код пакета уже написан на Android XML, но я планирую создать еще один плагин для внутреннего использования. Я намерен разработать это с помощью Android Jetpack без использования XML, что позволит вносить изменения в дизайн Flutter посредством передачи аргументов через каналы методов.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»