FlutterEngine.run(withEntrypoint: «screenAEntrypoint»); по-прежнему ищет main() вместо функции, отмеченной @pragma('vm:eIOS

Программируем под IOS
Ответить
Anonymous
 FlutterEngine.run(withEntrypoint: «screenAEntrypoint»); по-прежнему ищет main() вместо функции, отмеченной @pragma('vm:e

Сообщение Anonymous »


Я пытаюсь интегрировать Flutter в приложение для iOS. Следуя документации, я мог показать приложение Flutter, используя flutterEngine.run(); из Swift.

Сейчас я пытаюсь использовать flutterEngine.run(withEntrypoint: "screenAEntrypoint");, чтобы показать ScreenA в screen_a.dart в lib, но я получаю эти сообщения в консоли Xcode:

2023-10-03 13:59:59.509135+0200 тест интеграции флаттера [78506:757029] [VERBOSE-2:dart_isolate.cc(168)] Не удалось запустить основную точку входа Dart. 2023-10-03 13:59:59.510175+0200 тест интеграции флаттера [78506:757029] [VERBOSE-2:runtime_controller.cc(422)] Не удалось создать корневой изолят. 2023-10-03 13:59:59.510244+0200 тест интеграции флаттера [78506:757029] [VERBOSE-2:shell.cc(614)] Не удалось запустить движок с конфигурацией. Я пытался указать файл как flutterEngine.run(withEntrypoint: "screenAEntrypoint", LibraryURI: "screen_a.dart");, но Xcode не находит его:

2023-10-03 14:17:09.961063+0200 тест интеграции флаттера [81661:784695] [VERBOSE-2:shell.cc(91)] Ошибка Dart: Dart_LookupLibrary: библиотека 'screen_a.dart' нет найденный. 2023-10-03 14:17:09.961165+0200 тест интеграции флаттера [81661:784695] [VERBOSE-2:dart_isolate.cc(667)] Не удалось разрешить основную функцию точки входа. 2023-10-03 14:17:09.961228+0200 тест интеграции флаттера [81661:784695] [VERBOSE-2:dart_isolate.cc(168)] Не удалось запустить основную точку входа Dart. 2023-10-03 14:17:09.962495+0200 тест интеграции флаттера [81661:784695] [VERBOSE-2:runtime_controller.cc(422)] Не удалось создать корневой изолят. 2023-10-03 14:17:09.962563+0200 тест интеграции флаттера [81661:784695] [VERBOSE-2:shell.cc(614)] Не удалось запустить движок с конфигурацией. Почему он ищет main() также при использовании опции withEntrypoint? Разве он не должен искать `screenAEntrypoint()?

Вот как я создаю FlutterEngine:

импортировать SwiftUI импортировать флаттер импорт FlutterPluginRegistrant // Создаём движок Flutter класс FlutterDependency: ObservableObject { let flutterEngine = FlutterEngine(name: «мой флаттер-движок»); в этом(){ // Запускает точку входа Dart по умолчанию с маршрутом Flutter по умолчанию. main.dart // flutterEngine.run(); //точка входа в main.dart flutterEngine.run(withEntrypoint: «screenAEntrypoint»); // flutterEngine.run(withEntrypoint: "screenAEntrypoint", LibraryURI: "screen_a.dart"); // Подключает плагины с кодом платформы iOS к этому приложению. GeneratedPluginRegistrant.register(с: self.flutterEngine); } } @основной struct flutter_integration_testApp: Приложение { // flutterDependency будет внедрен с использованием EnvironmentObject. @StateObject var flutterDependities = FlutterDependologies() var body: некоторая сцена { ОкноГруппа { ContentView().environmentObject(flutterDependities) } } } и это представление, которое его использует:

импортировать SwiftUI импортировать CoreData импортировать флаттер структура ContentView: Просмотр { // Зависимости Flutter передаются в EnvironmentObject. @EnvironmentObject var flutterDependities: FlutterDependities // Кнопка создана для вызова функции showFlutter при нажатии. var body: some View { Текст("Просмотр iOS") Button("Показать флаттер!") { шоуФлаттер() } } функция showFlutter() { // Получаем RootViewController. сторожить пусть windowScene = UIApplication.shared.connectedScenes .first(where: {$0.activationState == .foregroundActive && $0 is UIWindowScene }) как? UIWindowScene, пусть окно = windowScene.windows.first(где: \.isKeyWindow), пусть rootViewController = window.rootViewController еще {возврат} // Создаем FlutterViewController. пусть flutterViewController = FlutterViewController( движок: flutterDependency.flutterEngine, имя пера: ноль, комплект: ноль) flutterViewController.modalPresentationStyle = .overCurrentContext flutterViewController.isViewOpaque = false rootViewController.present(flutterViewController, анимированный: true) } } Это экран, который я пытаюсь показать:
import 'package:flutter/material.dart'; @pragma('vm:точка входа') недействительный экранAEntrypoint() { runApp(const MaterialApp( дома: ScreenA(), )); } // @pragma('vm:entry-point') класс ScreenA расширяет StatelessWidget { const ScreenA({super.key}); @переопределить Сборка виджета (контекст BuildContext) { вернуть эшафот( AppBar: AppBar( заголовок: const Text("Экран А"), ), body: const Text("Точка входа на экран А"), ); } }
Ответить

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

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

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

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

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