submitDialogWithDesignSystem<Payload, Result> static method

void submitDialogWithDesignSystem<Payload, Result>({
  1. required SmartRepository<Payload, Result> repository,
  2. required BuildContext context,
  3. dynamic listener(
    1. BuildContext,
    2. SmartState<Result>
    )?,
  4. Widget success(
    1. BuildContext,
    2. Result,
    3. VoidCallback close
    )?,
  5. Widget fail(
    1. BuildContext,
    2. VoidCallback close
    )?,
  6. Widget loading(
    1. BuildContext,
    2. VoidCallback close
    )?,
  7. Widget initial(
    1. BuildContext,
    2. VoidCallback close
    )?,
  8. ComponentInitialAction<Payload> initialAction = const ComponentInitialAction.none(),
  9. bool dismissible = false,
})

Implementation

static void submitDialogWithDesignSystem<Payload, Result>({
  required SmartRepository<Payload, Result> repository,
  required BuildContext context,
  Function(BuildContext, SmartState<Result>)? listener,
  Widget Function(BuildContext, Result, VoidCallback close)? success,
  Widget Function(BuildContext, VoidCallback close)? fail,
  Widget Function(BuildContext, VoidCallback close)? loading,
  Widget Function(BuildContext, VoidCallback close)? initial,
  ComponentInitialAction<Payload> initialAction = const ComponentInitialAction.none(),
  bool dismissible = false,
}) {
  SmartFeatureBuilder.submitDialog<Payload, Result>(
    context: context,
    repository: repository,
    initialAction: initialAction,
    dismissible: dismissible,
    builder: (context, state, onClose) {
      return state.when(
        // `TODO`(Matias): Replace widgets with design system widgets
        initial: () => initial?.call(context, onClose) ?? const Center(child: Text('Waiting for action')),
        loading: (_, __) => loading?.call(context, onClose) ?? const CircularProgressIndicator.adaptive(),
        fail: (_) => fail?.call(context, onClose) ?? const Center(child: Text('Failed to submit data')),
        success: (data) =>
            success?.call(context, data, onClose) ??
            Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                const Text('Data submitted'),
                ElevatedButton(onPressed: () => _onClose(context), child: const Text('Close')),
              ],
            ),
      );
    },
    listener: listener,
  );
}