Flutter to MobilePay provides easy integration with MobilePay. It uses the MobilePay AppSwitch SDK to switch to the MobilePay app, perform the payment and then return the transaction information back to Flutter.

Flutter to MobilePay works on both Android* and iOS.

* see caveats further down


This plugin has not yet been tested with a real merchant id or in a production application.


import "package:flutter_to_mobilepay/flutter_to_mobilepay.dart";
import "package:uuid/uuid.dart";

void main() async {
    await MobilePay.initialize(
        merchantID: TestMerchantID.denmark,
        country: Country.denmark,
        urlScheme: "myapp", // iOS only, see installation

class MobilePayButton extends StatelessWidget {
    Widget build(BuildContext context) {
        return RaisedButton(
            child: const Text("Pay with MobilePay"),
            onPressed: () async {

                Payment payment = Payment(
                    orderID: Uuid().v4(),
                    price: 100, // double
                Transaction transaction = await MobilePay.createPayment(payment);
                print("transaction id: ${transaction.id}");
                print("order id: ${transaction.orderID}");
                print("total withdrawn: ${transaction.withdrawnFromCard}");



Add the package as a dependency to your project


  # ...
  flutter_to_mobilepay: ^1.0.0

Android should be ready to go, however iOS requires a bit more work.


Opening other apps on iOS requires registering their URL schemes (and your own). Add your app's URL scheme to your Info.plist if you haven't already.


<!-- ... -->
        <string> -- your bundle id -- </string>
                -- your url scheme --
This must match the one provided to `MobilePay.initialize(urlScheme: "")`

Documentation: https://developer.apple.com/documentation/uikit/inter-process_communication/allowing_apps_and_websites_to_link_to_your_content/defining_a_custom_url_scheme_for_your_app

If you wish to check if the MobilePay app is installed, you have to add the following URL schemes (or exclude the ones you don't need) to your Info.plist.


<!-- ... -->
    <string>mobilepay</string> <!-- denmark -->
    <string>mobilepayfi</string> <!-- finland -->
    <string>mobilepayno</string> <!-- norway -->


  • The MobilePay AppSwitch SDK does not target the latest Android SDK version. It uses deprecated APIs on newer versions and is not compatible with Android P at all.




On the native side of things, Flutter to MobilePay is written in Objective C and Java. It does most things by calling the platform with maps as arguments, containing the needed data. However the payments are implemented using an EventChannel stream. This is because the payment callback is sent to the Android activity and iOS app delegate, not the function creating the payment. When the payment callback is received, it transforms it into a map and sends it to Flutter through the EventChannel. createPayment() awaits the payment and returns it to the user.