Доступ к приложению 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
Ответить

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

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

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

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

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