start method
dynamic
start({
- required BuildContext context,
- required SpotFlowPaymentManager paymentManager,
- void onComplete(
- 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,
),
)));
}