showSearchableOptionsSheet method

void showSearchableOptionsSheet({
  1. required BuildContext context,
  2. required String heading,
  3. required Widget optionsBuilder(
    1. BuildContext context
    ),
  4. required dynamic onSearchChanged(
    1. String
    ),
  5. String? selectedValue,
})

Implementation

void showSearchableOptionsSheet({
  required BuildContext context,
  required String heading,
  required Widget Function(BuildContext context) optionsBuilder,
  required Function(String) onSearchChanged,
  String? selectedValue,
}) {
  TextEditingController searchController = TextEditingController();
  showModalBottomSheet(
    context: context,
    isScrollControlled: true,
    shape: const RoundedRectangleBorder(
      borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
    ),
    builder: (c) {
      return Padding(
        padding: EdgeInsets.only(
          bottom: MediaQuery.of(c).viewInsets.bottom,
        ),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Container(
              margin: const EdgeInsets.symmetric(vertical: 8),
              width: 40,
              height: 4,
              decoration: BoxDecoration(
                color: AppColors.greyD0,
                borderRadius: BorderRadius.circular(2),
              ),
            ),
            Padding(
              padding:
                  const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
              child: Text(heading, style: Styles.tsBlack3BSemiBold16()),
            ),
            Padding(
              padding: const EdgeInsets.symmetric(horizontal: 16),
              child: InputTextField(
                onChanged: onSearchChanged,
                textFieldWrapper: searchController,
                hintText: Strings.search,
                prefix: Padding(
                  padding:
                      const EdgeInsets.only(left: 16.0, top: 16, bottom: 16),
                  child: SvgPicture.asset(
                    Images.search,
                    color: AppColors.greyB5,
                  ),
                ),
                hintStyle: Styles.tsGrey80Regular12(),
                borderRadius: 30,
              ),
            ),
            20.h,
            Flexible(
              child: Padding(
                padding: const EdgeInsets.symmetric(horizontal: 16),
                child: optionsBuilder(c),
              ),
            ),
            const SizedBox(height: 20),
          ],
        ),
      );
    },
  );
}