showOptionsBottomSheet function

void showOptionsBottomSheet({
  1. required BuildContext context,
  2. required Text title,
  3. required List<ListTile> options,
  4. required ValueChanged<int> onItemSelected,
  5. bool? showSkipButton,
  6. String? skipButtonText,
  7. VoidCallback? onSkipPressed,
})

Implementation

void showOptionsBottomSheet({
  required BuildContext context,
  required Text title,
  required List<ListTile> options,
  required ValueChanged<int> onItemSelected,
  bool? showSkipButton,
  String? skipButtonText,
  VoidCallback? onSkipPressed,
}) {
  showModalBottomSheet(
      context: context,
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.only(
          topLeft: Radius.circular(30.0),
          topRight: Radius.circular(30.0),
        ),
      ),
      isScrollControlled: true,
      builder: (context) {
        return SafeArea(
          child: Container(
            padding: EdgeInsets.all(10),
            child: SingleChildScrollView(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.start,
                mainAxisSize: MainAxisSize.min,
                children: [
                  Padding(
                    padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 10),
                    child: Align(alignment: Alignment.centerLeft, child: title),
                  ),
                  Container(
                    child: ListView(
                      shrinkWrap: true,
                      physics: ScrollPhysics(),
                      padding: EdgeInsets.zero,
                      children: options.map((e) {
                        int index = options.indexOf(e);
                        return InkWell(
                            onTap: () {
                              onItemSelected(index);

                              print(index);
                            },
                            child: e);
                      }).toList(),
                    ),
                  ),
                  Visibility(
                    visible: showSkipButton ?? false,
                    child: Container(
                      margin: EdgeInsets.symmetric(horizontal: 10),
                      child: CustomButton(
                          text: skipButtonText ?? "Cancel",
                          onPressed: onSkipPressed ??
                              () {
                                Navigator.of(context).pop();
                              }),
                    ),
                  ),
                ],
              ),
            ),
          ),
        );
      });
}