🚗 Apple CarPlay for Flutter Apps. Aims to make it safe to use apps made with Flutter in the car by integrating with CarPlay.

Overview

Flutter CarPlay

CarPlay with Flutter 🚗

License: MIT Pub Version (including pre-releases)

Flutter Apps now on Apple CarPlay! flutter_carplay aims to make it safe to use iPhone apps made with Flutter in the car by integrating with CarPlay. CarPlay takes the things you want to do while driving and puts them on the car’s built-in display.

Apple announced some great features in iOS 14, one of which is users download CarPlay apps from the App Store and use them on iPhone like any other app. When an iPhone with a CarPlay app is connected to a CarPlay vehicle, the app icon appears on the CarPlay home screen. CarPlay apps are not separate apps—you add CarPlay support to an existing app.

Your app uses the CarPlay framework to present UI elements to the user. iOS manages the display of UI elements and handles the interface with the car. Your app does not need to manage the layout of UI elements for different screen resolutions, or support different input hardware such as touchscreens, knobs, or touch pads.

It supports only iOS 14.0+. For general design guidance, see Human Interface Guidelines for CarPlay Apps.

Overview

Flutter CarPlay Introduction

Before you begin CarPlay integration, you must carefully read this section.

The official App Programming Guidelines from Apple is the most valuable resource for understanding the needs, limits, and capabilities of CarPlay Apps. This documentation is a 49-page which clearly spells out the some actions required, and you are strongly advised to read it. If you are interested in a CarPlay System, learn more about the MFi Program.

Templates

CarPlay apps are built from a fixed set of user interface templates that iOS renders on the CarPlay screen. Each CarPlay app category can only use a restricted number of templates. Your app entitlement determines your access to templates. Flutter CarPlay

Supports

flutter_carplay currently supports:

  • Action Sheet Template
  • Alert Template
  • Grid Template
  • List Template
  • Tab Bar Template

By evaluating this information, you can request for the relevant entitlement from Apple.

Road Map

Since I don't have some required entitlements, other templates will be supported in the future releases by flutter_carplay.

  • Map
  • Search
  • Voice Control & "Hey Siri" for hands-free voice activation
  • Information
  • Contact
  • Point of Interest
  • Now Playing

Contributing

  • Pull Requests are always welcome.
  • Pull Request Reviews are even more welcome! I need help in testing.
  • If you are interested in contributing more actively, please contact me at [email protected] Thanks!
  • If you want to help in coding, join Slack Channel, so we can chat over there.

Requesting the CarPlay Entitlements

All CarPlay apps require a CarPlay app entitlement.

If you want to build, run and publish your app on Apple with CarPlay compatibility or test or share the app with others through the TestfFlight or AdHoc, you must first request Apple to approve your Developer account for CarPlay access. The process can take from a few days to weeks or even months. It depends on the type of Entitlement you are requesting.

To request a CarPlay app entitlement from Apple, go to https://developer.apple.com/contact/carplay and provide information about your app, including the CarPlay App Category. You must also agree to the CarPlay Entitlement Addendum.

With this project, you can start developing and testing through Apple's CarPlay Simulator without waiting for CarPlay Entitlements. Apple will review your request. If your app meets the criteria for a CarPlay app, Apple will assign a CarPlay app entitlement to your Apple Developer Account and will notify you.

Whether you are running the app through a simulator or developing it for distribution, you must ensure that the relevant entitlement key is added to the Entitlements.plist file. You must create an Entitlements.plist file if you do not already have one.

After you receive the CarPlay Entitlement

After you receive the entitlement, you need to configure your Xcode project to use it, which involves several steps. You create and import a provisioning profile, and add an Entitlements.plist file. Your project’s code signing settings also require minor changes.

For more detailed instructions about how to create and import the CarPlay Provisioning Profile and add an Entitlements File to Xcode Project, go to Configure your CarPlay-enabled app with the entitlements it requires.

Disclaimer Before The Installation

You are about to make some minor changes to your Xcode project after installing this package. This is due to the fact that It requires bitcode compilation which is missing in Flutter. You will procedure that will relocate (we won't remove or edit) some Flutter and its package engines. If you're planning to add this package to a critical project for you, you should proceed cautiously.

Please check THE EXAMPLE PROJECT before you begin to the installation.

THE INSTALLATION STEPS MAY BE DIFFICULT OR MAY NOT WORK PROPERLY WITH A FEW PACKAGES IN YOUR CURRENT PROJECT THAT COMMUNICATE WITH THE FLUTTER ENGINE. IF YOU ARE NOT COMPLETELY SURE WHAT YOU ARE DOING, PLEASE CREATE AN ISSUE, SO THAT I CAN HELP YOU TO SOLVE YOUR PROBLEM OR EXPLAIN WHAT YOU NEED TO.

WHILE THE INSTALLATION PROGRESS, IF YOU TRY TO CHANGE ANYTHING (E.G. ANYTHING WORKS WITH FLUTTER ENGINE, ANYTHING IN GENERATED PLUGIN REGISTRANT SPECIFICALLY ITS LOCATION, ANY FILE NAME, ANY CLASS NAME, OR ANY OTHER FUNCTION THAT WORKS ON APPDELEGATE CLASS, TEMPLATE OR WINDOW APPLICATION DELEGATE SCENE NAMES USED IN INFO.PLIST, INCLUDED STORYBOARD NAMES, BUT NOT LIMITED TO THESE), YOU ARE MOST LIKELY TO ENCOUNTER IRREVERSIBLE ERRORS AND IT MAY DAMAGE TO YOUR PROJECT. I STRONGLY RECOMMEND THAT YOU SHOULD COPY YOUR EXISTING PROJECT BEFORE THE INSTALLATION.

Get Started

Requirement Actions after Installating the Package

  1. The iOS platform version must be set to 14.0. To make it global, navigate to ios/Podfile and copy the first two lines:
# Uncomment this line to define a global platform for your project
+ platform :ios, '14.0'
- # platform :ios, '9.0'

After changing the platform version, execute the following command in your terminal to update your pod files:

// For Apple Silicon M1 chips:
$ cd ios && arch -x86_64 pod install --repo-update

// For Intel chips:
$ cd ios && pod install --repo-update
  1. Open ios/Runner.xcworkspace in Xcode. In your project navigator, open AppDelegate.swift.

    Flutter CarPlay

    Delete the specified codes below from the application function in AppDelegate.swift, and change it with the code below:

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application( _ application: UIApplication,
                        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
-   GeneratedPluginRegistrant.register(with: self)
-   return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+   return true
}
}
  1. Create a swift file named SceneDelegate.swift in the Runner folder (not in the xcode main project file) and add the code below:

    @available(iOS 13.0, *)
    class SceneDelegate: UIResponder, UIWindowSceneDelegate {
        var window: UIWindow?
    
        func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            guard let windowScene = scene as? UIWindowScene else { return }
    
            window = UIWindow(windowScene: windowScene)
    
            let flutterEngine = FlutterEngine(name: "SceneDelegateEngine")
            flutterEngine.run()
            GeneratedPluginRegistrant.register(with: flutterEngine)
            let controller = FlutterViewController.init(engine: flutterEngine, nibName: nil, bundle: nil)
            window?.rootViewController = controller
            window?.makeKeyAndVisible()
        }
    }

    Flutter CarPlay

  2. One more step, open the Info.plist file whether in your favorite code editor or in the Xcode. I'm going to share the base code, so if you open in the Xcode, you can fill with the raw keys with the values.

    <key>UIApplicationSceneManifest</key>
    <dict>
      <key>UIApplicationSupportsMultipleScenes</key>
      <true />
      <key>UISceneConfigurations</key>
      <dict>
        <key>CPTemplateApplicationSceneSessionRoleApplication</key>
        <array>
          <dict>
            <key>UISceneConfigurationName</key>
            <string>CarPlay Configuration</string>
            <key>UISceneDelegateClassName</key>
            <string>flutter_carplay.FlutterCarPlaySceneDelegate</string>
          </dict>
        </array>
        <key>UIWindowSceneSessionRoleApplication</key>
        <array>
          <dict>
            <key>UISceneConfigurationName</key>
            <string>Default Configuration</string>
            <key>UISceneDelegateClassName</key>
            <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
            <key>UISceneStoryboardFile</key>
            <string>Main</string>
          </dict>
        </array>
      </dict>
    </dict>

That's it, you're ready to build your first CarPlay app! 🚀 😎

Usage & Features

See Full Example

Basic Usage

  • Import the all classes that you need from just one file:
import 'package:flutter_carplay/flutter_carplay.dart';
  • Initialize the CarPlay Controllers and set a root template for the CarPlay view hierarchy:
final FlutterCarplay _flutterCarplay = FlutterCarplay();

FlutterCarplay.setRootTemplate(
  rootTemplate: CPTabBarTemplate(
    templates: [
      CPListTemplate(
        sections: [
          CPListSection(
            items: [
              CPListItem(
                text: "Item 1",
                detailText: "Detail Text",
                onPress: (complete, self) {
                  self.setDetailText("You can change the detail text.. 🚀");
                  Future.delayed(const Duration(seconds: 1), () {
                    self.setDetailText("Customizable Detail Text");
                    complete();
                  });
                },
              ),
            ],
            header: "First Section",
          ),
        ],
        title: "Home",
        showsTabBadge: false,
        systemIcon: "house.fill",
      ),
    ],
  ),
  animated: true,
);

You can set a root template without initializing the CarPlay Controllers, but some callback functions may not work or most likely you will get an error.

It's recommended that you should set the root template in the first initState of your app.

Listen Connection Changes

You can detect connection changes, such as when CarPlay is connected to iPhone, is in the background, or is completely disconnected.

/// Add the listener
_flutterCarplay.addListenerOnConnectionChange(onCarplayConnectionChange);

void onCarplayConnectionChange(CPConnectionStatusTypes status) {
  // Do things when carplay connection status is:
  // - CPConnectionStatusTypes.connected
  // - CPConnectionStatusTypes.background
  // - CPConnectionStatusTypes.disconnected
  // - CPConnectionStatusTypes.unknown
}

/// Remove the listener
_flutterCarplay.removeListenerOnConnectionChange();

CarPlay API Methods

CarPlay.setRootTemplate

Sets the root template of the navigation hierarchy. If a navigation hierarchy already exists, CarPlay replaces the entire hierarchy.

  • rootTemplate is a template to use as the root of a new navigation hierarchy. If one exists, it will replace the current rootTemplate. Must be one of the type: CPTabBarTemplate, CPGridTemplate, CPListTemplate. If not, it will throw an TypeError.
  • If animated is true, CarPlay animates the presentation of the template, but will be ignored this flag when there isn’t an existing navigation hierarchy to replace.

CarPlay cannot have more than 5 templates on one screen.

FlutterCarplay.setRootTemplate(
  rootTemplate: /* CPTabBarTemplate, CPGridTemplate or CPListTemplate */,
  animated: true,
);

CarPlay.push

Adds a template to the navigation hierarchy and displays it.

  • template is to add to the navigation hierarchy. Must be one of the type: CPGridTemplate, CPListTemplate. If not, it will throw an TypeError.
  • If animated is true, CarPlay animates the transition between templates.

There is a limit to the number of templates that you can push onto the screen. All apps are limited to pushing up to 5 templates in depth, including the root template.

FlutterCarplay.push(
  template: /* CPGridTemplate or CPListTemplate */,
  animated: true,
);

CarPlay.pop

Removes the top-most template from the navigation hierarchy.

  • If animated is true, CarPlay animates the transition between templates.
  • count represents how many times this function will occur.
FlutterCarplay.pop();
// OR
FlutterCarplay.pop(animated: true, count: 1);

CarPlay.popToRoot

Removes all of the templates from the navigation hierarchy except the root template.

  • If animated is true, CarPlay animates the presentation of the template.
FlutterCarplay.popToRoot(animated: true);

CarPlay.popModal

Removes a modal template. Since CPAlertTemplate and CPActionSheetTemplate are both modals, they can be removed.

  • If animated is true, CarPlay animates the transition between templates.
FlutterCarplay.popModal(animated: true);

CarPlay.connectionStatus

Getter for current CarPlay connection status. It will return one of CPConnectionStatusTypes as String.

FlutterCarplay.connectionStatus

Templates

CarPlay supports general purpose templates such as alerts, lists, and tab bars. They are used to display contents on the CarPlay screen from the app. The Developer Guide contains more information on the templates that Apple supports.

If you attempt to use a template not supported by your entitlement, an exception will occur at runtime.

Tab Bar Template

Flutter CarPlay

The tab bar is a multi-purpose container for other templates, with each template occupying one tab in the tab bar.

final CPTabBarTemplate tabBarTemplate = CPTabBarTemplate(
  templates: [
    CPListTemplate(
      sections: [
        CPListSection(
          items: [
            CPListItem(
              text: "Item 1",
              detailText: "Detail Text",
              onPress: (complete, self) {
                // Returns the self class so that the item
                // can be updated within self while loading
                self.setDetailText("You can change the detail text.. 🚀");
                // complete function stops the loading
                complete();
              },
              image: 'images/logo_flutter_1080px_clr.png',
            ),
            CPListItem(
              text: "Item 2",
              detailText: "Start progress bar",
              isPlaying: false,
              playbackProgress: 0,
              // asset name defined in pubspec.yaml
              image: 'images/logo_flutter_1080px_clr.png',
              onPress: (complete, self) {
                complete();
              },
            ),
          ],
          header: "First Section",
        ),
      ],
      title: "Home",
      showsTabBadge: false,
      systemIcon: "house.fill",
    ),
    CPListTemplate(
      sections: [],
      title: "Settings",
      // If there is no section in the list template,
      // empty view title and subtitle variants will be shown
      emptyViewTitleVariants: ["Settings"],
      emptyViewSubtitleVariants: [
        "No settings have been added here yet. You can start adding right away"
      ],
      showsTabBadge: false,
      systemIcon: "gear",
    ),
  ],
);

FlutterCarplay.setRootTemplate(rootTemplate: tabBarTemplate, animated: true);

Grid Template

Flutter CarPlay

Grid Template is a specific style of menu that presents up to 8 items represented by an image and a title. Use the grid template to let people select from a fixed list of categories.

final CPGridTemplate gridTemplate = CPGridTemplate(
  title: "Grid Template",
  buttons: [
    for (var i = 1; i < 9; i++)
      CPGridButton(
        titleVariants: ["Item $i"],
        image: 'images/logo_flutter_1080px_clr.png',
        onPress: () {
          print("Grid Button $i pressed");
        },
      ),
  ],
);

FlutterCarplay.push(template: gridTemplate, animated: true);
// OR
FlutterCarplay.setRootTemplate(rootTemplate: gridTemplate, animated: true);

Alert Template

Flutter CarPlay

Alerts provide important information about your app's status. An alert consists of a title and one or more buttons, depending on the type.

If underlying conditions permit, alerts can be dismissed programatically.

final CPAlertTemplate alertTemplate = CPAlertTemplate(
  titleVariants: ["Alert Title"],
  actions: [
    CPAlertAction(
      title: "Okay",
      style: CPAlertActionStyles.normal,
      onPress: () {
        print("Okay pressed");
        FlutterCarplay.popModal(animated: true);
      },
    ),
    CPAlertAction(
      title: "Cancel",
      style: CPAlertActionStyles.cancel,
      onPress: () {
        print("Cancel pressed");
        FlutterCarplay.popModal(animated: true);
      },
    ),
    CPAlertAction(
      title: "Remove",
      style: CPAlertActionStyles.destructive,
      onPress: () {
        print("Remove pressed");
        FlutterCarplay.popModal(animated: true);
      },
    ),
  ],
),

FlutterCarplay.showAlert(template: alertTemplate, animated: true);

Action Sheet Template

Flutter CarPlay

Action Sheet Template is a type of alert that appears when control or action is taken and gives a collection of options based on the current context.

Use action sheets to let people initiate tasks, or to request confirmation before performing a potentially destructive operation.

final CPActionSheetTemplate actionSheetTemplate = CPActionSheetTemplate(
  title: "Action Sheet Template",
  message: "This is an example message.",
  actions: [
    CPAlertAction(
      title: "Cancel",
      style: CPAlertActionStyles.cancel,
      onPress: () {
        print("Cancel pressed in action sheet");
        FlutterCarplay.popModal(animated: true);
      },
    ),
    CPAlertAction(
      title: "Dismiss",
      style: CPAlertActionStyles.destructive,
      onPress: () {
        print("Dismiss pressed in action sheet");
        FlutterCarplay.popModal(animated: true);
      },
    ),
    CPAlertAction(
      title: "Ok",
      style: CPAlertActionStyles.normal,
      onPress: () {
        print("Ok pressed in action sheet");
        FlutterCarplay.popModal(animated: true);
      },
    ),
  ],
);

FlutterCarplay.showActionSheet(template: actionSheetTemplate, animated: true);

List Template

Flutter CarPlay

A list presents data as a scrolling, single-column table of rows that can be divided into sections. Lists are ideal for text-based content, and can be used as a means of navigation for hierarchical information. Each item in a list can include attributes such as an icon, title, subtitle, disclosure indicator, progress indicator, playback status, or read status.

Some cars dynamically limit lists to a maximum of 12 items. You always need to be prepared to handle the case where only 12 items can be shown. Items beyond the maximum will not be shown.

final CPListTemplate listTemplate = CPListTemplate(
  sections: [
    CPListSection(
      items: [
        CPListItem(
          text: "Item 1",
          detailText: "Detail Text",
          onPress: (complete, self) {
            // Returns the self class so that the item
            // can be updated within self while loading
            self.setDetailText("You can change the detail text.. 🚀");
            // complete function stops the loading
            complete();
          },
          image: 'images/logo_flutter_1080px_clr.png',
        ),
        CPListItem(
          text: "Item 2",
          detailText: "Start progress bar",
          isPlaying: false,
          playbackProgress: 0,
          // asset name defined in pubspec.yaml
          image: 'images/logo_flutter_1080px_clr.png',
          onPress: (complete, self) {
            complete();
          },
        ),
      ],
      header: "First Section",
    ),
  ],
  title: "Home",
  showsTabBadge: false,
  systemIcon: "house.fill",
  // If there is no section in the list template,
  // empty view title and subtitle variants will be shown
  emptyViewTitleVariants: ["Home"],
  emptyViewSubtitleVariants: [
    "Nothing has added here yet. You can start adding right away"
  ],
);

FlutterCarplay.push(template: listTemplate, animated: true);
// OR
FlutterCarplay.setRootTemplate(rootTemplate: listTemplate, animated: true);

LICENSE

MIT License

Copyright (c) 2021 Oğuzhan Atalay

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Comments
  • car play emulator crashes/ not working

    car play emulator crashes/ not working

    Hi there,

    I use an m1 macbook air and followed the instructions outlined on pub.dev and in this issue for setting up entitlements, your response was very useful! 🙂

    This is the project I used when encountering the following errors:

    1. iphone app crashes when I open the carplay simulator
    2. carplay simulator displays grey screen when connected

    1. iphone app crashes when I open the carplay simulator

    https://user-images.githubusercontent.com/45692434/144070060-d2ecebb0-7626-4ecf-af8b-5814c69d658b.mov

    repro steps:

    1. make sure carplay simulator is closed
    2. run flutter app
    3. open carplay simulator
    4. iphone app crashes

    2. carplay simulator displays grey screen when connected

    https://user-images.githubusercontent.com/45692434/144070610-ef750fdd-25d8-4bef-8fea-0c646582c7ab.mov

    repro steps:

    1. make sure carplay simulator is open
    2. run flutter app
    3. open carplay app
    4. carplay app has grey screen

    To note: RunnerDebug.entitlements is used in this project, I did also try Runner.entitlements but with no effect.

    good first issue in testing 
    opened by Niall-Kenny 15
  • New Features: Mapbox

    New Features: Mapbox

    Thank you for this nice project!

    1. Would be nice if you could also implement mapbox map to carplay. We would be very happy. https://pub.dev/packages/mapbox_gl
    2. Playing radio would be nice too

    Best regards from Germany :-)

    new-feature let's discuss 
    opened by sarp86 4
  • Problems configuring my project

    Problems configuring my project

    Hi, first of all congratulations for the initiative, I'm wanting to use your package, I had problems inserting it in the project I'm working on so I created a new project using Flutter 2.5

    So, I followed all the steps, with the exception of "Entitlements.plist", as I haven't received the rights from Apple yet.

    I'm getting these two errors when trying to build:

    image

    I downloaded the example project and got it running, so I checked a few things different from what is said in Readme.

    In example, in the Podfile file this line is still commented out: # platform :ios, '9.0'

    By Xcode it also says that iOS Deployment Target is 9.0

    • flutter doctor -v

    image

    help wanted question 
    opened by danielmessi13 3
  • [VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: NoSuchMethodError: Class 'CPListTemplate' has no instance getter 'templates'.

    [VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: NoSuchMethodError: Class 'CPListTemplate' has no instance getter 'templates'.

    When having a CPListTemplate as "rootTemplate", methods such as "self.setDetailText" cause this error:

    [VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: NoSuchMethodError: Class 'CPListTemplate' has no instance getter 'templates'.

    image

    Repository: https://github.com/danielmessi13/carplay_test

    bug good first issue 
    opened by danielmessi13 2
  • Clicking on CarPlay App icon closes the app on iOS Phone on M1 in package v1.0.3 and displays the grey screen though connection status is maintained somehow.

    Clicking on CarPlay App icon closes the app on iOS Phone on M1 in package v1.0.3 and displays the grey screen though connection status is maintained somehow.

        Version 1.0.3 has been published in pub.dev. Check it out [here](https://pub.dev/packages/flutter_carplay). 🎉
    

    Thank you for @EArminjon's contribution with #14. This issue has been marked as resolved and closed. Please continue the discussion if the issue remains and don't forget to join the Discord Server, so we can chat over there!

    Originally posted by @oguzhnatly in https://github.com/oguzhnatly/flutter_carplay/issues/7#issuecomment-1146799863

    opened by bensalcie 1
  • Major bug when onPress is called in a screen other than the root

    Major bug when onPress is called in a screen other than the root

    Add an onPress to the ListTemplate A Section

                  CPListItem(
                    text: "Item 1",
                    onPress: (complete, self) {
                      print('Button Click');
                      complete();
                    },
                  ),
    

    And you will see this behaviour.

    https://user-images.githubusercontent.com/21172855/190155504-9cc52273-d5bf-46ad-b07e-d9cdcb02ac87.mov

    I did some research. Turns out there is a major bug in the findItem method

      static func findItem(elementId: String, actionWhenFound: (_ item: FCPListItem) -> Void) {
        let objcRootTemplateType = String(describing: SwiftFlutterCarplayPlugin.objcRootTemplate).match(#"(.*flutter_carplay\.(.*)\))"#)[0][2]
        var templates: [FCPListTemplate] = []
        if (objcRootTemplateType.elementsEqual(String(describing: FCPListTemplate.self))) {
          templates.append(SwiftFlutterCarplayPlugin.objcRootTemplate as! FCPListTemplate)
          NSLog("FCP: FCPListTemplate")
        } else if (objcRootTemplateType.elementsEqual(String(describing: FCPTabBarTemplate.self))) {
          templates = (SwiftFlutterCarplayPlugin.objcRootTemplate as! FCPTabBarTemplate).getTemplates()
          NSLog("FCP: FCPTabBarTemplate")
        } else {
          NSLog("FCP: item not found 1: \(elementId)")
          return
        }
        for t in templates {
          for s in t.getSections() {
            for i in s.getItems() {
              NSLog("FCP: items: \(t.elementId) \(s.elementId) \(i.elementId)")
              if (i.elementId == elementId) {
                NSLog("FCP: item found: \(elementId)")
                actionWhenFound(i)
                return
              }
            }
          }
        }
        NSLog("FCP: item not found 2: \(elementId)")
      }
    

    I added some logs. And these are the logs I got:

    FCP: On Press Send event
    FCP: SET ITEMS FOR: Optional("A Section"): items: 4
    FCP: SET ITEMS FOR: Optional("B Section"): items: 2
    FCP: SET ITEMS FOR: Optional("C Section"): items: 2
    FCP: onListItemSelectedComplete: fb7982ac-12f4-4ddb-a315-69fcf9ffc789
    FCP: FCPTabBarTemplate
    FCP: GET ITEMS FOR: Optional("First Section"): items: 2
    FCP: items: 300ef966-6cbb-4435-aebe-25e7dea0060f 51f17de1-ecc6-47f9-aed8-9a138ef19865 89283c2a-5e98-47eb-8f99-0c875098cfd6
    FCP: items: 300ef966-6cbb-4435-aebe-25e7dea0060f 51f17de1-ecc6-47f9-aed8-9a138ef19865 6776af5d-4cb0-4572-a3cb-a4627ca29112
    FCP: GET ITEMS FOR: Optional("Second Section"): items: 3
    FCP: items: 300ef966-6cbb-4435-aebe-25e7dea0060f a6215f6c-5eb2-4b1a-8b0f-dc2739a8b188 0cb547b1-366e-47b8-bc5c-db6220bdeae4
    FCP: items: 300ef966-6cbb-4435-aebe-25e7dea0060f a6215f6c-5eb2-4b1a-8b0f-dc2739a8b188 9759bd49-5366-45bf-b8a6-d72bf1dc44a1
    FCP: items: 300ef966-6cbb-4435-aebe-25e7dea0060f a6215f6c-5eb2-4b1a-8b0f-dc2739a8b188 c577273f-520e-4816-ad18-bf6e7eb072f1
    FCP: GET ITEMS FOR: Optional("Features"): items: 6
    FCP: items: 6fb3dfc3-0112-418c-b5f7-90b7495d335f c7ee5afd-2770-4005-9a7e-7e22c30d33a4 084a1787-56e5-42d5-a2d8-02eafc0ce250
    FCP: items: 6fb3dfc3-0112-418c-b5f7-90b7495d335f c7ee5afd-2770-4005-9a7e-7e22c30d33a4 153b464a-e856-46de-9f9d-f1dbd816381a
    FCP: items: 6fb3dfc3-0112-418c-b5f7-90b7495d335f c7ee5afd-2770-4005-9a7e-7e22c30d33a4 eaf71ddf-d3af-4104-ac73-40314d257076
    FCP: items: 6fb3dfc3-0112-418c-b5f7-90b7495d335f c7ee5afd-2770-4005-9a7e-7e22c30d33a4 fb7982ac-12f4-4ddb-a315-69fcf9ffc789
    FCP: item found: fb7982ac-12f4-4ddb-a315-69fcf9ffc789
    FCP: STOP HANDLER: fb7982ac-12f4-4ddb-a315-69fcf9ffc789
    
    

    I also added a log to the onPress event that was send and in the onListItemSelectedComplete, Also added logs to the init of the FCPListSection -> SET ITEMS FOR: ... And to the getItems of FCPListSection -> GET ITEMS FOR: ...

    Turns out that the FCPTabBarTemplate is retrieved instead of the FCPListTemplate.

    Workaround

    Just don't select anything for some time. (couple of seconds +/-10 - 20) And you will be able to select another item. (The spinner will stay there as long as you don't call the complet method

    opened by vanlooverenkoen 1
  • PointOfInterest template and Information template added

    PointOfInterest template and Information template added

    Hello Oğuzhan, Thank you for your work on the flutter_carplay plugin. I have extended this to support the Information Template and the PointOfInterest Template. Furthermore, I have added the documentation and the sample program. It would be nice if you could take a look at this and merge it into the plugin. Kind regards Olaf

    new-feature in testing 
    opened by OSch11 1
  • Images are not showing in the listing

    Images are not showing in the listing

    |In Readme:|In the built project:| |--|--| |image| image

    Repositories:

    • https://github.com/oguzhnatly/flutter_carplay#readme/blob/master/example/lib/main.dart
    • https://github.com/danielmessi13/carplay_test/tree/image_not_show
    help wanted invalid 
    opened by danielmessi13 1
  • changed relative urls to absolute urls for the Information Template s…

    changed relative urls to absolute urls for the Information Template s…

    Hello Oğuzhan!

    I changed the urls of the screenshots from relative to absolute, because the relative paths only worked on github, but not on: https://pub.dev/packages/flutter_carplay

    kind regards Olaf

    opened by OSch11 0
  • [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: NoSuchMethodError: Class 'CPTabBarTemplate' has no instance getter 'sections'.

    [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: NoSuchMethodError: Class 'CPTabBarTemplate' has no instance getter 'sections'.

    I have set CPTabBarTemplate as a root template. on click of any CPListItem we are pushing CPListTemplate and methods "self.setDetailText" cause below error -

    [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: NoSuchMethodError: Class 'CPTabBarTemplate' has no instance getter 'sections'. Receiver: Instance of 'CPTabBarTemplate' Tried calling: sections #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:38:5) #1 FlutterCarPlayController.updateCPListItem.<anonymous closure> package:flutter_carplay/controllers/carplay_controller.dart:76 <asynchronous suspension>

    Here is the Code - https://gist.github.com/Subhangi3/168c917dfb34e6eabdfcd2ecb6423e7e

    opened by Subhangi3 0
  • App crashes when I open the carplay simulator app

    App crashes when I open the carplay simulator app

    Hi,

    I use an m2 macbook air and followed the instructions outlined on pub.dev but my app crashed when I try to open the carplay simulator

    repro steps:

    run flutter app open carplay simulator iphone and carplay app crashes

    To note: RunnerDebug.entitlements is used in this project, I did also try Runner.entitlements but with no effect.

    SceneDelegate:

    @available(iOS 13.0, *)
    class SceneDelegate: UIResponder, UIWindowSceneDelegate {
        var window: UIWindow?
    
        func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            guard let windowScene = scene as? UIWindowScene else { return }
    
            window = UIWindow(windowScene: windowScene)
    
            let flutterEngine = FlutterEngine(name: "SceneDelegateEngine")
            flutterEngine.run()
            GeneratedPluginRegistrant.register(with: flutterEngine)
            let controller = FlutterViewController.init(engine: flutterEngine, nibName: nil, bundle: nil)
            window?.rootViewController = controller
            window?.makeKeyAndVisible()
        }
    }
    

    Crashlog:

    Exception Type:  EXC_CRASH (SIGABRT)
    Exception Codes: 0x0000000000000000, 0x0000000000000000
    Triggered by Thread:  0
    
    Last Exception Backtrace:
    0   CoreFoundation                	       0x11adb6368 __exceptionPreprocess + 226
    1   libobjc.A.dylib               	       0x113303baf objc_exception_throw + 48
    2   CoreFoundation                	       0x11adb6256 -[NSException initWithCoder:] + 0
    3   CarPlay                       	       0x14e9ed390 CPAssertAllowedClasses + 147
    4   CarPlay                       	       0x14e9ed255 -[CPInterfaceController setRootTemplate:animated:completion:] + 288
    5   flutter_carplay               	       0x113246615 FlutterCarPlaySceneDelegate.templateApplicationScene(_:didConnect:) + 725 (FlutterCarplayPluginSceneDelegate.swift:70)
    6   flutter_carplay               	       0x113246767 @objc FlutterCarPlaySceneDelegate.templateApplicationScene(_:didConnect:) + 71
    7   CarPlay                       	       0x14ea1fa21 -[CPTemplateApplicationScene _deliverInterfaceControllerToDelegate] + 625
    8   CarPlay                       	       0x14ea1e35a __64-[CPTemplateApplicationScene initWithSession:connectionOptions:]_block_invoke.24 + 125
    9   CoreFoundation                	       0x11ace75ca __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 120
    10  CoreFoundation                	       0x11ace7511 ___CFXRegistrationPost_block_invoke + 86
    11  CoreFoundation                	       0x11ace6af0 _CFXRegistrationPost + 541
    12  CoreFoundation                	       0x11ace63f9 _CFXNotificationPost + 822
    13  Foundation                    	       0x115464604 -[NSNotificationCenter postNotificationName:object:userInfo:] + 82
    14  UIKitCore                     	       0x127c987dc +[UIScene _sceneForFBSScene:create:withSession:connectionOptions:] + 1600
    15  UIKitCore                     	       0x128a69db8 -[UIApplication _connectUISceneFromFBSScene:transitionContext:] + 1318
    16  UIKitCore                     	       0x128a6a390 -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 562
    17  UIKitCore                     	       0x12841b7e0 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 350
    18  FrontBoardServices            	       0x11cb37c8a -[FBSScene _callOutQueue_agent_didCreateWithTransitionContext:completion:] + 415
    19  FrontBoardServices            	       0x11cb65deb __92-[FBSWorkspaceScenesClient createSceneWithIdentity:parameters:transitionContext:completion:]_block_invoke.187 + 102
    20  FrontBoardServices            	       0x11cb45cda -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 209
    21  FrontBoardServices            	       0x11cb659e0 __92-[FBSWorkspaceScenesClient createSceneWithIdentity:parameters:transitionContext:completion:]_block_invoke + 344
    22  libdispatch.dylib             	       0x114ea6a3a _dispatch_client_callout + 8
    23  libdispatch.dylib             	       0x114eaa4bf _dispatch_block_invoke_direct + 484
    24  FrontBoardServices            	       0x11cb8c6c0 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 30
    25  FrontBoardServices            	       0x11cb8c5b6 -[FBSSerialQueue _targetQueue_performNextIfPossible] + 174
    26  FrontBoardServices            	       0x11cb8c6e8 -[FBSSerialQueue _performNextFromRunLoopSource] + 19
    27  CoreFoundation                	       0x11ad15ebd __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    28  CoreFoundation                	       0x11ad15dfc __CFRunLoopDoSource0 + 157
    29  CoreFoundation                	       0x11ad155f9 __CFRunLoopDoSources0 + 212
    30  CoreFoundation                	       0x11ad0fdb3 __CFRunLoopRun + 927
    31  CoreFoundation                	       0x11ad0f637 CFRunLoopRunSpecific + 560
    32  GraphicsServices              	       0x11d9af28a GSEventRunModal + 139
    33  UIKitCore                     	       0x128a68425 -[UIApplication _run] + 994
    34  UIKitCore                     	       0x128a6d301 UIApplicationMain + 123
    35  Runner                        	       0x1045abb1f main + 63 (AppDelegate.swift:6)
    36  dyld_sim                      	       0x10e80b2bf start_sim + 10
    37  dyld                          	       0x206570310 start + 2432
    
    Kernel Triage:
    VM - pmap_enter retried due to resource shortage
    VM - pmap_enter retried due to resource shortage
    VM - pmap_enter retried due to resource shortage
    VM - pmap_enter retried due to resource shortage
    
    
    Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x109b71404 ???
    2   libsystem_pthread.dylib       	       0x1188ebf7b pthread_kill + 263
    3   libsystem_c.dylib             	       0x11884507a __abort + 139
    4   libsystem_c.dylib             	       0x118844fef abort + 145
    5   libc++abi.dylib               	       0x11347c742 abort_message + 241
    6   libc++abi.dylib               	       0x11346d95d demangling_terminate_handler() + 266
    7   libobjc.A.dylib               	       0x1132e7fae _objc_terminate() + 96
    8   FirebaseCrashlytics           	       0x1107f4485 FIRCLSTerminateHandler() + 325 (FIRCLSException.mm:452)
    9   libc++abi.dylib               	       0x11347bb65 std::__terminate(void (*)()) + 8
    10  libc++abi.dylib               	       0x11347bb16 std::terminate() + 54
    11  libdispatch.dylib             	       0x114ea6a4e _dispatch_client_callout + 28
    12  libdispatch.dylib             	       0x114eaa4bf _dispatch_block_invoke_direct + 484
    13  FrontBoardServices            	       0x11cb8c6c0 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 30
    14  FrontBoardServices            	       0x11cb8c5b6 -[FBSSerialQueue _targetQueue_performNextIfPossible] + 174
    15  FrontBoardServices            	       0x11cb8c6e8 -[FBSSerialQueue _performNextFromRunLoopSource] + 19
    16  CoreFoundation                	       0x11ad15ebd __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    17  CoreFoundation                	       0x11ad15dfc __CFRunLoopDoSource0 + 157
    18  CoreFoundation                	       0x11ad155f9 __CFRunLoopDoSources0 + 212
    19  CoreFoundation                	       0x11ad0fdb3 __CFRunLoopRun + 927
    20  CoreFoundation                	       0x11ad0f637 CFRunLoopRunSpecific + 560
    21  GraphicsServices              	       0x11d9af28a GSEventRunModal + 139
    22  UIKitCore                     	       0x128a68425 -[UIApplication _run] + 994
    23  UIKitCore                     	       0x128a6d301 UIApplicationMain + 123
    24  Runner                        	       0x1045abb1f main + 63 (AppDelegate.swift:6)
    25  dyld_sim                      	       0x10e80b2bf start_sim + 10
    26  dyld                          	       0x206570310 start + 2432
    
    Thread 1:: com.apple.rosetta.exceptionserver
    0   ???                           	    0x7ff7ffe8f750 ???
    1   ???                           	    0x7ff7ffea7b94 ???
    
    Thread 2:: com.apple.uikit.eventfetch-thread
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x1062ca0fc ???
    2   libsystem_kernel.dylib        	       0x11888967d mach_msg2_internal + 82
    3   libsystem_kernel.dylib        	       0x11888271a mach_msg_overwrite + 723
    4   libsystem_kernel.dylib        	       0x11887b989 mach_msg + 19
    5   CoreFoundation                	       0x11ad15766 __CFRunLoopServiceMachPort + 145
    6   CoreFoundation                	       0x11ad0ff6f __CFRunLoopRun + 1371
    7   CoreFoundation                	       0x11ad0f637 CFRunLoopRunSpecific + 560
    8   Foundation                    	       0x1154b19fc -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 213
    9   Foundation                    	       0x1154b1c75 -[NSRunLoop(NSRunLoop) runUntilDate:] + 72
    10  UIKitCore                     	       0x128b3be7e -[UIEventFetcher threadMain] + 535
    11  Foundation                    	       0x1154db247 __NSThread__start__ + 1009
    12  libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    13  libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 3:: io.worker.1
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec7e1 _pthread_cond_wait + 1243
    3   libc++.1.dylib                	       0x10ea17be2 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    4   Flutter                       	       0x11dea3629 fml::ConcurrentMessageLoop::WorkerMain() + 187
    5   Flutter                       	       0x11dea3de5 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 190
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 4:: io.worker.2
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec7e1 _pthread_cond_wait + 1243
    3   libc++.1.dylib                	       0x10ea17be2 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    4   Flutter                       	       0x11dea3629 fml::ConcurrentMessageLoop::WorkerMain() + 187
    5   Flutter                       	       0x11dea3de5 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 190
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 5:: io.worker.3
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec7e1 _pthread_cond_wait + 1243
    3   libc++.1.dylib                	       0x10ea17be2 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    4   Flutter                       	       0x11dea3629 fml::ConcurrentMessageLoop::WorkerMain() + 187
    5   Flutter                       	       0x11dea3de5 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 190
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 6:: io.worker.4
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec7e1 _pthread_cond_wait + 1243
    3   libc++.1.dylib                	       0x10ea17be2 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    4   Flutter                       	       0x11dea3629 fml::ConcurrentMessageLoop::WorkerMain() + 187
    5   Flutter                       	       0x11dea3de5 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 190
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 7:: io.worker.5
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec7e1 _pthread_cond_wait + 1243
    3   libc++.1.dylib                	       0x10ea17be2 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    4   Flutter                       	       0x11dea3629 fml::ConcurrentMessageLoop::WorkerMain() + 187
    5   Flutter                       	       0x11dea3de5 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 190
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 8:: io.worker.6
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec7e1 _pthread_cond_wait + 1243
    3   libc++.1.dylib                	       0x10ea17be2 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    4   Flutter                       	       0x11dea3629 fml::ConcurrentMessageLoop::WorkerMain() + 187
    5   Flutter                       	       0x11dea3de5 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 190
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 9:: io.worker.7
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec7e1 _pthread_cond_wait + 1243
    3   libc++.1.dylib                	       0x10ea17be2 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    4   Flutter                       	       0x11dea3629 fml::ConcurrentMessageLoop::WorkerMain() + 187
    5   Flutter                       	       0x11dea3de5 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 190
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 10:: io.worker.8
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec7e1 _pthread_cond_wait + 1243
    3   libc++.1.dylib                	       0x10ea17be2 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    4   Flutter                       	       0x11dea3629 fml::ConcurrentMessageLoop::WorkerMain() + 187
    5   Flutter                       	       0x11dea3de5 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::ConcurrentMessageLoop::ConcurrentMessageLoop(unsigned long)::$_0> >(void*) + 190
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 11:: dart:io EventHandler
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e942ac ???
    2   Flutter                       	       0x11e0b3148 dart::bin::EventHandlerImplementation::EventHandlerEntry(unsigned long) + 344
    3   Flutter                       	       0x11e0d1f08 dart::bin::ThreadStart(void*) + 40
    4   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    5   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 12:: Dart Profiler ThreadInterrupter
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec7e1 _pthread_cond_wait + 1243
    3   Flutter                       	       0x11e2766ce dart::Monitor::WaitMicros(long long) + 158
    4   Flutter                       	       0x11e2fa03f dart::ThreadInterrupter::ThreadMain(unsigned long) + 303
    5   Flutter                       	       0x11e275caf dart::ThreadStart(void*) + 159
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 13:: Dart Profiler SampleBlockProcessor
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x106e6e154 ???
    2   libsystem_pthread.dylib       	       0x1188ec816 _pthread_cond_wait + 1296
    3   Flutter                       	       0x11e2766b6 dart::Monitor::WaitMicros(long long) + 134
    4   Flutter                       	       0x11e27be25 dart::SampleBlockProcessor::ThreadMain(unsigned long) + 181
    5   Flutter                       	       0x11e275caf dart::ThreadStart(void*) + 159
    6   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    7   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 14:: SceneDelegateEngine.2.ui
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x1062ca0fc ???
    2   libsystem_kernel.dylib        	       0x11888967d mach_msg2_internal + 82
    3   libsystem_kernel.dylib        	       0x11888271a mach_msg_overwrite + 723
    4   libsystem_kernel.dylib        	       0x11887b989 mach_msg + 19
    5   CoreFoundation                	       0x11ad15766 __CFRunLoopServiceMachPort + 145
    6   CoreFoundation                	       0x11ad0ff6f __CFRunLoopRun + 1371
    7   CoreFoundation                	       0x11ad0f637 CFRunLoopRunSpecific + 560
    8   Flutter                       	       0x11deac719 fml::MessageLoopDarwin::Run() + 65
    9   Flutter                       	       0x11dea6526 fml::MessageLoopImpl::DoRun() + 22
    10  Flutter                       	       0x11deab617 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0> >(void*) + 169
    11  libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    12  libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 15:: SceneDelegateEngine.2.raster
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x1062ca0fc ???
    2   libsystem_kernel.dylib        	       0x11888967d mach_msg2_internal + 82
    3   libsystem_kernel.dylib        	       0x11888271a mach_msg_overwrite + 723
    4   libsystem_kernel.dylib        	       0x11887b989 mach_msg + 19
    5   CoreFoundation                	       0x11ad15766 __CFRunLoopServiceMachPort + 145
    6   CoreFoundation                	       0x11ad0ff6f __CFRunLoopRun + 1371
    7   CoreFoundation                	       0x11ad0f637 CFRunLoopRunSpecific + 560
    8   Flutter                       	       0x11deac719 fml::MessageLoopDarwin::Run() + 65
    9   Flutter                       	       0x11dea6526 fml::MessageLoopImpl::DoRun() + 22
    10  Flutter                       	       0x11deab617 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0> >(void*) + 169
    11  libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    12  libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 16:: SceneDelegateEngine.2.io
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x1062ca0fc ???
    2   libsystem_kernel.dylib        	       0x11888967d mach_msg2_internal + 82
    3   libsystem_kernel.dylib        	       0x11888271a mach_msg_overwrite + 723
    4   libsystem_kernel.dylib        	       0x11887b989 mach_msg + 19
    5   CoreFoundation                	       0x11ad15766 __CFRunLoopServiceMachPort + 145
    6   CoreFoundation                	       0x11ad0ff6f __CFRunLoopRun + 1371
    7   CoreFoundation                	       0x11ad0f637 CFRunLoopRunSpecific + 560
    8   Flutter                       	       0x11deac719 fml::MessageLoopDarwin::Run() + 65
    9   Flutter                       	       0x11dea6526 fml::MessageLoopImpl::DoRun() + 22
    10  Flutter                       	       0x11deab617 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0> >(void*) + 169
    11  libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    12  libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 17:: SceneDelegateEngine.2.profiler
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x1062ca0fc ???
    2   libsystem_kernel.dylib        	       0x11888967d mach_msg2_internal + 82
    3   libsystem_kernel.dylib        	       0x11888271a mach_msg_overwrite + 723
    4   libsystem_kernel.dylib        	       0x11887b989 mach_msg + 19
    5   CoreFoundation                	       0x11ad15766 __CFRunLoopServiceMachPort + 145
    6   CoreFoundation                	       0x11ad0ff6f __CFRunLoopRun + 1371
    7   CoreFoundation                	       0x11ad0f637 CFRunLoopRunSpecific + 560
    8   Flutter                       	       0x11deac719 fml::MessageLoopDarwin::Run() + 65
    9   Flutter                       	       0x11dea6526 fml::MessageLoopImpl::DoRun() + 22
    10  Flutter                       	       0x11deab617 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::function<void (fml::Thread::ThreadConfig const&)> const&, fml::Thread::ThreadConfig const&)::$_0> >(void*) + 169
    11  libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    12  libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 18:: com.google.firebase.crashlytics.MachExceptionServer
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x1062ca0fc ???
    2   libsystem_kernel.dylib        	       0x11888967d mach_msg2_internal + 82
    3   libsystem_kernel.dylib        	       0x11888271a mach_msg_overwrite + 723
    4   libsystem_kernel.dylib        	       0x11887b989 mach_msg + 19
    5   FirebaseCrashlytics           	       0x110804cae FIRCLSMachExceptionReadMessage + 78 (FIRCLSMachException.c:192)
    6   FirebaseCrashlytics           	       0x110804bf0 FIRCLSMachExceptionServer + 48 (FIRCLSMachException.c:168)
    7   libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    8   libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 19:: com.apple.NSURLConnectionLoader
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x1062ca0fc ???
    2   libsystem_kernel.dylib        	       0x11888967d mach_msg2_internal + 82
    3   libsystem_kernel.dylib        	       0x11888271a mach_msg_overwrite + 723
    4   libsystem_kernel.dylib        	       0x11887b989 mach_msg + 19
    5   CoreFoundation                	       0x11ad15766 __CFRunLoopServiceMachPort + 145
    6   CoreFoundation                	       0x11ad0ff6f __CFRunLoopRun + 1371
    7   CoreFoundation                	       0x11ad0f637 CFRunLoopRunSpecific + 560
    8   CFNetwork                     	       0x10fbf7324 0x10f9c9000 + 2286372
    9   Foundation                    	       0x1154db247 __NSThread__start__ + 1009
    10  libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    11  libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 20:: com.apple.CoreMotion.MotionThread
    0   ???                           	       0x1061d29a8 ???
    1   <translation info unavailable>	       0x1062ca0fc ???
    2   libsystem_kernel.dylib        	       0x11888967d mach_msg2_internal + 82
    3   libsystem_kernel.dylib        	       0x11888271a mach_msg_overwrite + 723
    4   libsystem_kernel.dylib        	       0x11887b989 mach_msg + 19
    5   CoreFoundation                	       0x11ad15766 __CFRunLoopServiceMachPort + 145
    6   CoreFoundation                	       0x11ad0ff6f __CFRunLoopRun + 1371
    7   CoreFoundation                	       0x11ad0f637 CFRunLoopRunSpecific + 560
    8   CoreFoundation                	       0x11ad10657 CFRunLoopRun + 40
    9   CoreMotion                    	       0x1141166e0 0x113fb9000 + 1431264
    10  libsystem_pthread.dylib       	       0x1188ec259 _pthread_start + 125
    11  libsystem_pthread.dylib       	       0x1188e7c7b thread_start + 15
    
    Thread 21:
    0   ???                           	    0x7ff7ffead87c ???
    
    Thread 22:
    0   ???                           	    0x7ff7ffead87c ???
    
    Thread 23:
    0   ???                           	    0x7ff7ffead87c ???
    
    
    opened by DavidHDJ 0
  • Added support for Images from URL,Supply any type

    Added support for Images from URL,Supply any type

    This PR has fixes to enable one load images from a URL without doing anything on flutter. Just supply the corresponding URL . If it starts with http/https it will be loaded from online. If not, it will loaded from Assets.This has the update to load the images asynchronous, so you don't have to worry about Blocking UI to your flutter App.

    1. Maintain default convinience extension. (FCPExtensions.swift)
    convenience init?(withURL url: URL) throws {
                      let imageData = try Data(contentsOf: url)
                      self.init(data: imageData)
                    }
    
    1. When about to render image, check the source. Then dispatch it on a separate thread for both local and url images.
    if image != nil {
                 if image!.starts(with: "http"){
                     DispatchQueue.global(qos: .background).async {
                         let url = URL(string: self.image!)
                         let stationImage = try? UIImage(withURL: url!)
             //
                             DispatchQueue.main.async {
                                 listItem.setImage(stationImage)
                                   }
                           }
                 }else{
                     listItem.setImage(UIImage().fromFlutterAsset(name: image!))
                 }
             }
    

    This will intercept all urls beginning with http with custom loader and those beginning with any other format as asset images. Thank you.

    new-feature in testing 
    opened by bensalcie 3
  • Bitcode requirement

    Bitcode requirement

    Hi there, and thanks for you work on this library.

    We're playing around with it to see if it is viable for our Carplay app, but one thing that concerns us is the Bitcode compilation requirement.

    Bitcode has been recently deprecated in Xcode 14, and flutter will drop support for bitcode in a future release. So I'd like to understand why bitcode is needed for flutter_carplay and whether there are plans for removing this requirement, or if it is currently possible to build an app with flutter_carplay without bitcode compilation.

    Thank you!

    opened by vinicius0026 0
  • When run on Android

    When run on Android

    Hello,I know that CarPlay is not compatible with android but ho can I prevent to run it when build android version?

    The following MissingPluginException was thrown while activating platform stream on channel com.oguzhnatly.flutter_carplay/event: MissingPluginException(No implementation found for method listen on channel com.oguzhnatly.flutter_carplay/event)

    When the exception was thrown, this was the stack #0 MethodChannel._invokeMethod package:flutter/…/services/platform_channel.dart:294 #1 EventChannel.receiveBroadcastStream. package:flutter/…/services/platform_channel.dart:637

    opened by federico2390 0
Releases(v1.0.3)
  • v1.0.3(Jun 5, 2022)

  • v1.0.2+1(Mar 24, 2022)

    Supports:

    • [x] Point Of Interest Template 🎉
    • [x] Information Template 🎉
    • [x] Action Sheet Template
    • [x] Alert Template
    • [x] Grid Template
    • [x] List Template
    • [x] Tab Bar Template

    Fixes:

    • [x] README.md updated.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Mar 24, 2022)

    Supports:

    • [x] Point Of Interest Template 🎉
    • [x] Information Template 🎉
    • [x] Action Sheet Template
    • [x] Alert Template
    • [x] Grid Template
    • [x] List Template
    • [x] Tab Bar Template
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Oct 17, 2021)

  • v1.0.0+1(Aug 28, 2021)

Owner
Oğuzhan Atalay
Frontend Developer       React | React Native | Flutter  Computer Engineering Student
Oğuzhan Atalay
A platform for car sharing where users can book any car that suits their needs and wants for their intended journey, from the closest hosts in the community.

Getting Started This project is a starting point for a Flutter application. For help getting started with Flutter, view our online documentation, whic

Faisal Ramdan 28 Apr 29, 2022
A platform to make your social media experience more safe

cyber_watch A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

Waleed Umar 0 Feb 25, 2022
Proof of concept of Flutter running on CarPlay

CarPlay Flutter Widgets What is this? This is a proof of concept of a Flutter based app running on Apple CarPlay app. What can I use it for? You can u

Flutter Auto Technologies 7 Apr 9, 2022
The Health==Wealth app aims to make leading a healthy lifestyle simple, fun and rewarding for students.

The Health==Wealth app aims to make leading a healthy lifestyle simple, fun and rewarding for students. Students can also track and see their progress through the app.

null 2 Jun 25, 2022
This project aims to provide a simple and customizable Review Page interaction made with Flutter.

Review Page Interaction This project aims to provide a simple and customizable Review Page interaction made with Flutter. Check it out on Béhance (htt

Marcos Morales Rodrigo 29 Mar 29, 2022
Create flutter project with all needed configuration in two minutes (theme, localization, connect to firebase, FCM, local notifications, safe API call, error handling, animation..etc)

Flutter GetX Template Flutter Getx template to make starting project fast and easy . Introduction We all face the same problem when we want to start a

Emad Beltaje 150 Jan 7, 2023
A web-safe implementation of dart.io.Platforms. Helps avoid the "Unsupported operation: Platform._operatingSystem" runtime error.

Universal Platform - A Web-safe Platform class Currently, if you include the dart.io.Platform anywhere in your code, your app will throw the following

gskinner team 86 Nov 20, 2022
Shared preferences typed - A type-safe wrapper around shared preferences, inspired by ts-localstorage

Typed Shared Preferences A type-safe wrapper around shared_preferences, inspired

Philipp Bauer 0 Jan 31, 2022
Toor makes service locators compile-time safe and easy to manage

?? What is Toor Toor makes service locators compile-time safe and easy to manage. ?? Getting Started Define your dependencies somewhere in the project

Arshak Aghakaryan 5 Jul 25, 2022
Safe is an open source mobile platorm to discretely capture incidents with ease, powered by an SMCE written in native Swift and Kotlin.

Safe A powerful tool for personal and community safety. joinsafe.me » Available for iOS & Android ~ Links will be added once a release is available. ~

Safe 10 Oct 26, 2022
how to Integrating facebook audience network to flutter app for banner, interstitial, rewarded, native and native banner

fb_ads_flutter_12 A new Flutter project. Getting Started Watch the complite tutorial for integrating Facebook ads into the Flutter app in our Youtube

null 4 Nov 26, 2022
Integrating ChatMessaging via WebSocket (socket_io package) in Flutter Application

Chat Messaging via WebSocket Integrating ChatMessaging via WebSocket (socket_io_client package) in Flutter Application. The server is also built in Da

Saksham Gupta 2 Jul 26, 2022
Flutter UI design for a car booking application

Flutter UBER UI Kit A flutter Uber UI Kit inspired by A design on behance 20+ Screens and still making more. ?? Star if you like what you see. ⭐ ⭐ ⭐ ⭐

Olayemii Garuba 360 Dec 11, 2022
Flutter UI design for a car booking application

Flutter UBER UI Kit A flutter Uber UI Kit inspired by A design on behance 20+ Screens and still making more. ?? Star if you like what you see. ⭐ ⭐ ⭐ ⭐

Olayemii Garuba 331 Dec 22, 2021
An android app to track GTA Online car sell limits.

Dupeboard v1.1.0 An android app to track GTA Online car sell limits. Helpful for those who are into vehicle duplicating glitches. This app is built wi

Arnob Karmokar 41 Oct 26, 2022
Car rental app created by Jakub Sobański and Martin Gogołowicz (creator of UI)

Flutter Car Rental App with darkmode support Flutter 2.8.1 Null Safety Car rental app created by Jakub Sobański and Martin Gogołowicz (creator of UI).

Jakub Sobański 21 Dec 30, 2022
This is an animated app used to control Tesla Car which is on progress and will be published soon

Animated Tesla App Conect using Flutter Packages we are using: flutter_svg: link We will cover how to use ImplicitlyAnimatedWidge and how to use multi

null 1 Nov 13, 2021
Built-in Cam Cloud Service(2022 Embeded SW Contest/Car & Mobility)

BCCS (Built-in Cam Cloud System) 목차 작품 소개 작품 시연 어플리케이션 UI Hardware 구성 Software 구성 기술스택 1. 작품 소개 작품 설명 본 시스템은 차량에서 발생한 이벤트를 별도의 저장소 없이 클라우드에서 관리하여 자료의

null 3 Oct 12, 2022
A music player component for Flutter (i.e. Spotify, Apple Music, etc.) [AGPL/example/no longer maintaining]

This is an example I currently have no plans of putting this on Pub. Originally, I did, but I lost interest. However, I think this is a good example,

Tobe Osakwe 215 Dec 12, 2022