start method

dynamic start({
  1. required BuildContext context,
  2. required SpotFlowPaymentManager paymentManager,
  3. void onComplete(
    1. PaymentResponseBody paymentResponseBody
    )?,
})

Implementation

start({
  required BuildContext context,
  required SpotFlowPaymentManager paymentManager,
  void Function(PaymentResponseBody paymentResponseBody)? onComplete,
}) {
  if (paymentManager.amount == null && paymentManager.planId == null) {
    throw Exception('Please provide an amount or a plan id');
  }
  Navigator.of(context).push(MaterialPageRoute(
      builder: (context) => ChangeNotifierProvider(
            builder: (context, child) {
              return Navigator(
                initialRoute: SpotFlowRouteName.homePage,
                onGenerateRoute: (RouteSettings settings) {
                  WidgetBuilder builder;
                  switch (settings.name) {
                    case SpotFlowRouteName.homePage:
                      builder = (_) => HomePage(
                            paymentManager: paymentManager,
                            closeSpotFlow: () {
                              Navigator.of(context).pop();
                            },
                          );
                    case SpotFlowRouteName.enterCardDetailsPage:
                      builder = (_) => EnterCardDetailsPage(
                            close: () {
                              Navigator.of(context).pop();
                            },
                          );
                    case SpotFlowRouteName.enterBillingAddressPage:
                      final args =
                          settings.arguments as EnterBillingAddressPageArgs;
                      builder = (_) => EnterBillingAddressPage(
                            close: () {
                              Navigator.of(context).pop();
                            },
                            paymentResponseBody: args.paymentResponseBody,
                          );
                    case SpotFlowRouteName.viewBankDetailsPage:
                      builder = (_) => ViewBankDetailsPage(
                            close: () {
                              Navigator.of(context).pop();
                            },
                          );
                    case SpotFlowRouteName.viewBanksUssdPage:
                      builder = (_) => ViewBanksUssdPage(
                            close: () {
                              Navigator.of(context).pop();
                            },
                          );
                    case SpotFlowRouteName.successPage:
                      final args = settings.arguments as SuccessPageArguments;
                      builder = (_) => SuccessPage(
                            successMessage: args.successMessage,
                            paymentOptionsEnum: args.paymentOptionsEnum,
                            close: () {
                              Navigator.of(context).pop();
                            },
                            onComplete: () {
                              onComplete?.call(args.paymentResponseBody);
                            },
                          );
                    default:
                      throw Exception('Invalid route: ${settings.name}');
                  }

                  return MaterialPageRoute<void>(
                      builder: builder, settings: settings);
                },
              );
            },
            create: (BuildContext context) => AppStateProvider(
              paymentManager: paymentManager,
            ),
          )));
}