Доступ к приложению Flutter с экрана CarPlay без предварительного открытия приложенияIOS

Программируем под IOS
Anonymous
Доступ к приложению Flutter с экрана CarPlay без предварительного открытия приложения

Сообщение Anonymous »

У меня есть приложение Flutter — простой онлайн-плеер, использующий flutter_carplay и audio_service. Я выпускаю это приложение только для iOS.
  • При запуске приложения оно загружает элементы, в которые можно воспроизвести. На мобильном устройстве это работает должным образом.
  • Если я запускаю приложение, а затем включаю его через CarPlay, на экране CarPlay все элементы отображаются правильно.
  • Если приложение не запущено и я открываю его только через CarPlay, экран пуст. Мне кажется, приложение нужно сначала запустить, прежде чем оно сможет работать через CarPlay. Может ли кто-нибудь посоветовать, как добиться такого поведения (чтобы его можно было запускать напрямую из CarPlay)? Я считаю, что это может быть полезно для многих разработчиков, поскольку функциональность CarPlay во Flutter до сих пор недостаточно документирована.
Это точка входа в приложение:< /p>

Код: Выделить всё

void main() async {
await App.initApp(); // basic initialization (Firebase, ...)
runApp(const App());
}
Это виджет приложения.

Код: Выделить всё

class App extends StatelessWidget {
const App({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp(
builder: (BuildContext context, Widget? child) {},
home: HomePage()
);
}
}
Весь код, связанный с CarPlay, можно найти на главной странице:

Код: Выделить всё

class HomePage extends StatefulWidget {
const HomePage({super.key});

@override
State createState() => _HomePageState();
}

class _HomePageState extends State {
final FlutterCarplay _flutterCarplay = FlutterCarplay();

@override
void initState() {
super.initState();
initCarPlay();
}

@override
Widget build(BuildContext context) {
return ...;
}

void initCarPlay() {
FlutterCarplay.setRootTemplate(
rootTemplate: CPListTemplate(
sections: [
CPListSection(header: "Section 1", items: [
CPListItem(text: "Item 1"),
CPListItem(text: "Item 2"),
CPListItem(text: "Item 3"),
]),
CPListSection(header: "Section 2", items: [
CPListItem(text: "Item 4"),
CPListItem(text: "Item 5"),
CPListItem(text: "Item 6"),
])
],
showsTabBadge: false,
systemIcon: "house.fill",
),
animated: true,
);

_flutterCarplay.forceUpdateRootTemplate();
_flutterCarplay.addListenerOnConnectionChange(_onCarplayConnectionChange);
}

void _onCarplayConnectionChange(CPConnectionStatusTypes status) {
//
}

@override
void dispose() {
_flutterCarplay.removeListenerOnConnectionChange();
super.dispose();
}
}
Я пытался вызвать initCarPlay() напрямую в main(), но результат был тот же.

Подробнее здесь: https://stackoverflow.com/questions/785 ... -app-first

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