showDrawerGeneral<T> static method

Future<T?> showDrawerGeneral<T>({
  1. required GeneralParamsDrawer? params,
  2. required Widget content,
})

Implementation

static Future<T?> showDrawerGeneral<T>({
  required GeneralParamsDrawer? params,
  required Widget content,
}) async {
  var mediaQuery = MediaQuery.of(params!.context);
  return await showModalBottomSheet(
    context: params.context,
    builder: (context) {
      return ClipRRect(
        borderRadius: BorderRadius.only(
          topLeft: Radius.circular(params.radius ?? 8),
          topRight: Radius.circular(params.radius ?? 8),
        ),
        child: SingleChildScrollView(
          child: Container(
            width: double.infinity,
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.only(
                topLeft: Radius.circular(params.radius ?? 8),
                topRight: Radius.circular(params.radius ?? 8),
              ),
            ),
            padding: const EdgeInsets.only(top: 10),
            child: Column(
              children: [
                /// strips
                Visibility(
                  visible: params.withStrip,
                  child: Container(
                    width: 65,
                    height: 6,
                    margin: const EdgeInsets.only(bottom: 10),
                    decoration: BoxDecoration(
                      borderRadius: const BorderRadius.all(
                        Radius.circular(2.5),
                      ),
                      color: params.withStrip ? const Color(0xffe8e8e8) : Colors.transparent,
                    ),
                  ),
                ),

                /// header
                if (params.isUseHeader)
                  Padding(
                    padding: const EdgeInsets.all(16).copyWith(top: 10),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      mainAxisAlignment: MainAxisAlignment.start,
                      children: [
                        Row(
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: [
                            Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              mainAxisAlignment: MainAxisAlignment.start,
                              children: [
                                Text(
                                  params.titleHeader ?? "",
                                  style: TextStyle(
                                    fontSize: 18,
                                    fontWeight: FontWeight.w600,
                                    color: VentColorSwatch.Gray.shade900,
                                  ),
                                ),
                                if (params.subTitleHeader != null &&
                                    (params.subTitleHeader ?? "").trim().isNotEmpty)
                                  Text(
                                    params.subTitleHeader ?? "",
                                    style: TextStyle(
                                      fontSize: 14,
                                      fontWeight: FontWeight.w400,
                                      color: VentColorSwatch.Gray.shade700,
                                    ),
                                  ),
                              ],
                            ),
                            InkWell(
                              onTap: () {
                                if (params.onTapIconClose != null) {
                                  params.onTapIconClose?.call();
                                }
                                Navigator.pop(context);
                              },
                              child: const Icon(
                                Icons.close,
                                size: 24.0,
                              ),
                            ),
                          ],
                        ),
                      ],
                    ),
                  ),
                if (params.isUseHeader) const Divider(),

                /// content
                Column(
                  children: [
                    /// content
                    Padding(
                      padding: params.padding ?? const EdgeInsets.symmetric(horizontal: 20),
                      child: content,
                    ),
                    SizedBox(
                      height: mediaQuery.padding.bottom + (params.paddingBottom ?? 0.0),
                    )
                  ],
                ),
              ],
            ),
          ),
        ),
      );
    },
    isDismissible: params.isDismissable,
    backgroundColor: Colors.transparent,
    enableDrag: params.enableDrag,
    isScrollControlled: params.isScrollControlled,
    routeSettings: params.settings,
  );
}