showMoreDialog function

Future showMoreDialog(
  1. BuildContext context,
  2. EnxController obj
)

Implementation

Future<dynamic> showMoreDialog(BuildContext context, EnxController obj) {
  return showGeneralDialog(
    context: context,
    barrierDismissible: true,
    barrierLabel: 'Dismiss more options',
    barrierColor: EnxUiKitTheme.scrim(context),
    transitionDuration: const Duration(milliseconds: 300),
    pageBuilder: (context, animation1, animation2) {
      return Container();
    },
    transitionBuilder: (context, animation1, animation2, child) {
      return SlideTransition(
        position: Tween<Offset>(
          begin: const Offset(1.0, 0.0),
          end: Offset.zero,
        ).animate(CurvedAnimation(
          parent: animation1,
          curve: Curves.easeInOut,
        )),
        child: OrientationBuilder(
          builder: (context, orientation) {
            final mediaQuery = MediaQuery.of(context);
            final panelWidth =
                EnxUiKitTheme.sidePanelWidth(mediaQuery.size, orientation);

            return SafeArea(
              child: Scaffold(
                backgroundColor: Colors.transparent,
                body: Row(
                  children: [
                    Expanded(
                      child: GestureDetector(
                        onTap: () => Navigator.pop(context),
                        behavior: HitTestBehavior.opaque,
                      ),
                    ),
                    AnimatedContainer(
                      duration: const Duration(milliseconds: 200),
                      width: panelWidth,
                      height: mediaQuery.size.height,
                      decoration: BoxDecoration(
                        color: EnxUiKitTheme.surface(context),
                        border: Border.all(
                          width: 1.0,
                          color: EnxUiKitTheme.border(context),
                        ),
                        borderRadius: const BorderRadius.only(
                          topLeft: Radius.circular(15.0),
                          bottomLeft: Radius.circular(15.0),
                        ),
                      ),
                      child: ClipRRect(
                        borderRadius: const BorderRadius.only(
                          topLeft: Radius.circular(15.0),
                          bottomLeft: Radius.circular(15.0),
                        ),
                        child: ListView.separated(
                          padding: EdgeInsets.fromLTRB(
                            16,
                            24,
                            16,
                            mediaQuery.padding.bottom + 24,
                          ),
                          itemCount: obj.moreList.length,
                          separatorBuilder: (_, __) =>
                              const SizedBox(height: 4),
                          itemBuilder: (context, index) {
                            final item = obj.moreList[index];
                            return _MoreOptionTile(
                              item: item,
                              onTap: () {
                                obj.updateMoreList(item);
                                Get.back();
                              },
                              onSwitchChanged: (bool value) {
                                item.status = value;
                                obj.updateMoreList(item);
                                Get.back();
                              },
                            );
                          },
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            );
          },
        ),
      );
    },
  );
}