Generate and handle static shortcuts for Android. They can trigger custom actions inside of your app.

GIF

Getting Started

Modify the AndroidManifest.xml

Go to android/app/src/main/AndroidManifest.xml and add the following lines:

<manifest>
    <application>
        <activity>
            <meta-data
              android:name="android.app.shortcuts"
              android:resource="@xml/shortcuts"
            />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

Dependency

Add your launcher_name configuration to your pubspec.yaml as shown below. For each shortcut, you have to define the intent, that is accessible from within your app, a targetClass and a targetPackage, which help to identify the main Kotlin or Java file of your project, and a label, which will be visible for the user.

dependencies: 
  static_shortcuts: ^0.0.1 # check the latest version on pub.dev

# define your shortcuts here
static_shortcuts:
  foo:
    icon: "assets/add_icon.png"
    intent: "foo"
    targetClass: "com.OJCreator.static_shortcuts.MainActivity"
    targetPackage: "com.OJCreator.static_shortcuts"
    label: "Foo"
  bar:
    intent: "bar"
    targetClass: "com.OJCreator.static_shortcuts.MainActivity"
    targetPackage: "com.OJCreator.static_shortcuts"
    label: "Bar"

When you specified your shortcuts, run dart run static_shortcuts in your console.

Access the intent

You can access the intent at any moment, that has been used to launch the app:

import 'package:static_shortcuts/static_shortcuts.dart';

final shortcut = await StaticShortcuts.getShortcutIntentUri();

Localization

You can localize the launcher name like this:

static_shortcuts:
  foo:
    icon: "assets/add_icon.png"
    intent: "foo"
    targetClass: "com.OJCreator.static_shortcuts.MainActivity"
    targetPackage: "com.OJCreator.static_shortcuts"
    label:
      default: "Default (English) foo"
      de: "German foo"
      fr: "French foo"
      es: "Spanish foo"
      [...]

But make sure to add a default language for users, that do not use one of the other specified languages.