build method

  1. @override
Widget build(
  1. BuildContext context
)
override

Implementation

@override
Widget build(BuildContext context) {
  // Mirrorfly.setEventListener(this);
  return FocusDetector(
      onFocusGained: () {
        debugPrint('onFocusGained');
        // controller.initListeners();
        controller.checkArchiveSetting();
        // controller.getRecentChatList();
      },
      child: Obx(
        () => PopScope(
          canPop:
              !(controller.selected.value || controller.isSearching.value),
          onPopInvokedWithResult: (didPop, result) {
            if (didPop) {
              return;
            }
            if (controller.selected.value) {
              controller.clearAllChatSelection();
              return;
            } else if (controller.isSearching.value) {
              controller.getBackFromSearch();
              return;
            }
          },
          child: Theme(
            data: Theme.of(context).copyWith(
                tabBarTheme: AppStyleConfig.dashBoardPageStyle.tabBarTheme,
                appBarTheme: AppStyleConfig.dashBoardPageStyle.appBarTheme,
                floatingActionButtonTheme: AppStyleConfig
                    .dashBoardPageStyle.floatingActionButtonThemeData),
            child: CustomSafeArea(
              child: DefaultTabController(
                length: 2,
                child: Builder(builder: (ctx) {
                  return Scaffold(
                      floatingActionButton: controller.isSearching.value
                          ? null
                          : Obx(() {
                              return createFab(
                                  controller.currentTab.value, ctx);
                            }),
                      body: NestedScrollView(
                          headerSliverBuilder: (BuildContext context,
                              bool innerBoxIsScrolled) {
                            return [
                              Obx(() {
                                return SliverAppBar(
                                  snap: false,
                                  pinned: true,
                                  floating: !controller.selected.value ||
                                      !controller.isSearching.value,
                                  automaticallyImplyLeading: false,
                                  leading: controller.selected.value
                                      ? IconButton(
                                          icon: const Icon(Icons.clear),
                                          onPressed: () {
                                            controller
                                                .clearAllChatSelection();
                                          },
                                        )
                                      : controller.isSearching.value
                                          ? IconButton(
                                              icon: const Icon(
                                                  Icons.arrow_back),
                                              onPressed: () {
                                                controller
                                                    .getBackFromSearch();
                                              },
                                            )
                                          : null,
                                  title: controller.selected.value
                                      ? controller.currentTab.value == 0
                                          ? Text(
                                              (controller
                                                      .selectedChats.length)
                                                  .toString(),
                                              style: AppStyleConfig
                                                  .dashBoardPageStyle
                                                  .appBarTheme
                                                  .titleTextStyle,
                                            )
                                          : Text(
                                              (controller.selectedCallLogs
                                                      .length)
                                                  .toString(),
                                              style: AppStyleConfig
                                                  .dashBoardPageStyle
                                                  .appBarTheme
                                                  .titleTextStyle)
                                      : controller.isSearching.value
                                          ? TextField(
                                              focusNode:
                                                  controller.searchFocusNode,
                                              onChanged: (text) =>
                                                  controller.onChange(
                                                      text,
                                                      controller
                                                          .currentTab.value),
                                              controller: controller.search,
                                              autofocus: true,
                                              decoration: InputDecoration(
                                                  hintText: getTranslated(
                                                      "searchPlaceholder"),
                                                  border: InputBorder.none,
                                                  hintStyle: AppStyleConfig
                                                      .dashBoardPageStyle
                                                      .searchTextFieldStyle
                                                      .editTextHintStyle),
                                              style: AppStyleConfig
                                                  .dashBoardPageStyle
                                                  .searchTextFieldStyle
                                                  .editTextStyle,
                                            )
                                          : null,
                                  bottom: controller.isSearching.value
                                      ? null
                                      : TabBar(
                                          controller:
                                              controller.tabController,
                                          tabs: [
                                              Obx(() {
                                                return tabItem(
                                                    title:
                                                        getTranslated("chats")
                                                            .toUpperCase(),
                                                    count: controller
                                                        .unreadCountString,
                                                    tabItemStyle:
                                                        AppStyleConfig
                                                            .dashBoardPageStyle
                                                            .tabItemStyle);
                                              }),
                                              tabItem(
                                                  title:
                                                      getTranslated("calls")
                                                          .toUpperCase(),
                                                  count: controller
                                                      .unreadCallCountString,
                                                  tabItemStyle: AppStyleConfig
                                                      .dashBoardPageStyle
                                                      .tabItemStyle)
                                            ]),
                                  actions: [
                                    CustomActionBarIcons(
                                        popupMenuThemeData: AppStyleConfig
                                            .dashBoardPageStyle
                                            .popupMenuThemeData,
                                        availableWidth:
                                            NavUtils.size.width * 0.80,
                                        // 80 percent of the screen width
                                        actionWidth: 48,
                                        // default for IconButtons
                                        actions: [
                                          CustomAction(
                                            visibleWidget: IconButton(
                                              onPressed: () {
                                                controller.chatInfo();
                                              },
                                              icon: AppUtils.svgIcon(
                                                  icon: infoIcon,
                                                  colorFilter: ColorFilter.mode(
                                                      Theme.of(context)
                                                              .appBarTheme
                                                              .actionsIconTheme
                                                              ?.color ??
                                                          Colors.black,
                                                      BlendMode.srcIn)),
                                              tooltip: 'Info',
                                            ),
                                            overflowWidget: Text(
                                                getTranslated("info"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.info.value
                                                    ? ShowAsAction.always
                                                    : ShowAsAction.gone,
                                            keyValue: 'Info',
                                            onItemClick: () {
                                              controller.chatInfo();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: IconButton(
                                              onPressed: () {
                                                controller.currentTab.value ==
                                                        0
                                                    ? controller.deleteChats()
                                                    : controller
                                                        .deleteCallLog();
                                              },
                                              icon: AppUtils.svgIcon(
                                                  icon: delete,
                                                  colorFilter: ColorFilter.mode(
                                                      Theme.of(context)
                                                              .appBarTheme
                                                              .actionsIconTheme
                                                              ?.color ??
                                                          Colors.black,
                                                      BlendMode.srcIn)),
                                              tooltip: 'Delete',
                                            ),
                                            overflowWidget: Text(
                                                getTranslated("delete"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction: controller
                                                    .availableFeatures
                                                    .value
                                                    .isDeleteChatAvailable
                                                    .checkNull()
                                                ? controller.delete.value
                                                    ? ShowAsAction.always
                                                    : ShowAsAction.gone
                                                : ShowAsAction.gone,
                                            keyValue: 'Delete',
                                            onItemClick: () {
                                              controller.deleteChats();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: IconButton(
                                              onPressed: () {
                                                controller.pinChats();
                                              },
                                              icon: AppUtils.svgIcon(
                                                  icon: pin,
                                                  colorFilter: ColorFilter.mode(
                                                      Theme.of(context)
                                                              .appBarTheme
                                                              .actionsIconTheme
                                                              ?.color ??
                                                          Colors.black,
                                                      BlendMode.srcIn)),
                                              tooltip: 'Pin',
                                            ),
                                            overflowWidget: Text(
                                                getTranslated("pin"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction: controller.pin.value
                                                ? ShowAsAction.always
                                                : ShowAsAction.gone,
                                            keyValue: 'Pin',
                                            onItemClick: () {
                                              controller.pinChats();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: IconButton(
                                              onPressed: () {
                                                controller.unPinChats();
                                              },
                                              icon: AppUtils.svgIcon(
                                                  icon: unpin,
                                                  colorFilter: ColorFilter.mode(
                                                      Theme.of(context)
                                                              .appBarTheme
                                                              .actionsIconTheme
                                                              ?.color ??
                                                          Colors.black,
                                                      BlendMode.srcIn)),
                                              tooltip: 'UnPin',
                                            ),
                                            overflowWidget: Text(
                                                getTranslated("unPin"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.unpin.value
                                                    ? ShowAsAction.always
                                                    : ShowAsAction.gone,
                                            keyValue: 'UnPin',
                                            onItemClick: () {
                                              controller.unPinChats();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: IconButton(
                                              onPressed: () {
                                                controller.muteChats();
                                              },
                                              icon: AppUtils.svgIcon(
                                                  icon: mute,
                                                  colorFilter: ColorFilter.mode(
                                                      Theme.of(context)
                                                              .appBarTheme
                                                              .actionsIconTheme
                                                              ?.color ??
                                                          Colors.black,
                                                      BlendMode.srcIn)),
                                              tooltip: 'Mute',
                                            ),
                                            overflowWidget: Text(
                                                getTranslated("mute"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.mute.value
                                                    ? ShowAsAction.always
                                                    : ShowAsAction.gone,
                                            keyValue: 'Mute',
                                            onItemClick: () {
                                              controller.muteChats();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: IconButton(
                                              onPressed: () {
                                                controller.unMuteChats();
                                              },
                                              icon: AppUtils.svgIcon(
                                                  icon: unMute,
                                                  colorFilter: ColorFilter.mode(
                                                      Theme.of(context)
                                                              .appBarTheme
                                                              .actionsIconTheme
                                                              ?.color ??
                                                          Colors.black,
                                                      BlendMode.srcIn)),
                                              tooltip: 'UnMute',
                                            ),
                                            overflowWidget: Text(
                                                getTranslated("unMute"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.unmute.value
                                                    ? ShowAsAction.always
                                                    : ShowAsAction.gone,
                                            keyValue: 'UnMute',
                                            onItemClick: () {
                                              controller.unMuteChats();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: IconButton(
                                              onPressed: () {
                                                controller.archiveChats();
                                              },
                                              icon: AppUtils.svgIcon(
                                                  icon: archive,
                                                  colorFilter: ColorFilter.mode(
                                                      Theme.of(context)
                                                              .appBarTheme
                                                              .actionsIconTheme
                                                              ?.color ??
                                                          Colors.black,
                                                      BlendMode.srcIn)),
                                              tooltip: 'Archive',
                                            ),
                                            overflowWidget: Text(
                                                getTranslated("archived"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.archive.value
                                                    ? ShowAsAction.always
                                                    : ShowAsAction.gone,
                                            keyValue: 'Archived',
                                            onItemClick: () {
                                              controller.archiveChats();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: const Icon(
                                                Icons.mark_chat_read),
                                            overflowWidget: Text(
                                                getTranslated("markAsRead"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.read.value
                                                    ? ShowAsAction.never
                                                    : ShowAsAction.gone,
                                            keyValue: 'Mark as Read',
                                            onItemClick: () {
                                              controller.itemsRead();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: const Icon(
                                                Icons.mark_chat_unread),
                                            overflowWidget: Text(
                                                getTranslated("markAsUnread"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.unread.value
                                                    ? ShowAsAction.never
                                                    : ShowAsAction.gone,
                                            keyValue: 'Mark as unread',
                                            onItemClick: () {
                                              controller.itemsUnRead();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: IconButton(
                                              onPressed: () {
                                                controller.gotoSearch();
                                              },
                                              icon: AppUtils.svgIcon(
                                                  icon: searchIcon,
                                                  width: 18,
                                                  height: 18,
                                                  fit: BoxFit.contain,
                                                  colorFilter: ColorFilter.mode(
                                                      Theme.of(context)
                                                              .appBarTheme
                                                              .actionsIconTheme
                                                              ?.color ??
                                                          Colors.black,
                                                      BlendMode.srcIn)),
                                              tooltip: 'Search',
                                            ),
                                            overflowWidget: Text(
                                                getTranslated("search"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction: controller
                                                    .availableFeatures
                                                    .value
                                                    .isRecentChatSearchAvailable
                                                    .checkNull()
                                                ? controller.selected.value ||
                                                        controller
                                                            .isSearching.value
                                                    ? ShowAsAction.gone
                                                    : ShowAsAction.always
                                                : ShowAsAction.gone,
                                            keyValue: 'Search',
                                            onItemClick: () {
                                              controller.gotoSearch();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget: IconButton(
                                                onPressed: () => controller
                                                    .onClearPressed(),
                                                icon:
                                                    const Icon(Icons.close)),
                                            overflowWidget: Text(
                                                getTranslated("clear"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.clearVisible.value
                                                    ? ShowAsAction.always
                                                    : ShowAsAction.gone,
                                            keyValue: 'Clear',
                                            onItemClick: () {
                                              controller.onClearPressed();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget:
                                                const Icon(Icons.group_add),
                                            overflowWidget: Text(
                                                getTranslated("newGroup"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction: controller
                                                    .availableFeatures
                                                    .value
                                                    .isGroupChatAvailable
                                                    .checkNull()
                                                ? controller.selected.value ||
                                                        controller
                                                            .isSearching.value
                                                    ? ShowAsAction.gone
                                                    : ShowAsAction.never
                                                : ShowAsAction.gone,
                                            keyValue: 'New Group',
                                            onItemClick: () {
                                              controller.gotoCreateGroup();
                                            },
                                          ),
                                          CustomAction(
                                            visibleWidget:
                                                const Icon(Icons.web),
                                            overflowWidget: Text(
                                                getTranslated("clearCallLog"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.selected.value ||
                                                        controller.isSearching
                                                            .value ||
                                                        controller.currentTab
                                                                .value ==
                                                            0 ||
                                                        controller.callLogList
                                                            .isEmpty
                                                    ? ShowAsAction.gone
                                                    : ShowAsAction.never,
                                            keyValue: 'Clear call log',
                                            onItemClick: () => controller
                                                    .callLogList.isNotEmpty
                                                ? controller.clearCallLog()
                                                : toToast(getTranslated(
                                                    "noCallLog")),
                                          ),
                                          CustomAction(
                                            visibleWidget:
                                                const Icon(Icons.settings),
                                            overflowWidget: Text(
                                                getTranslated("settings"),
                                                style: AppStyleConfig
                                                    .dashBoardPageStyle
                                                    .popupMenuThemeData
                                                    .textStyle),
                                            showAsAction:
                                                controller.selected.value ||
                                                        controller
                                                            .isSearching.value
                                                    ? ShowAsAction.gone
                                                    : ShowAsAction.never,
                                            keyValue: 'Settings',
                                            onItemClick: () {
                                              controller.gotoSettings();
                                            },
                                          ),
                                          /*CustomAction(
                                            visibleWidget: const Icon(Icons.web),
                                            overflowWidget: Text(getTranslated("web"),style:AppStyleConfig.dashBoardPageStyle.popupMenuThemeData.textStyle),
                                            showAsAction:
                                                controller.selected.value || controller.isSearching.value ? ShowAsAction.gone : ShowAsAction.never,
                                            keyValue: 'Web',
                                            onItemClick: () => controller.webLogin(),
                                          ),*/
                                        ]),
                                  ],
                                );
                              }),
                            ];
                          },
                          body: TabBarView(
                              controller: controller.tabController,
                              children: [
                                RecentChatView(
                                  controller: controller,
                                  archivedTileStyle: AppStyleConfig
                                      .dashBoardPageStyle.archivedTileStyle,
                                  recentChatItemStyle: AppStyleConfig
                                      .dashBoardPageStyle.recentChatItemStyle,
                                  noDataTextStyle: AppStyleConfig
                                      .dashBoardPageStyle.noDataTextStyle,
                                  contactItemStyle: AppStyleConfig
                                      .dashBoardPageStyle.contactItemStyle,
                                ),
                                CallHistoryView(
                                  controller: controller,
                                  callHistoryItemStyle: AppStyleConfig
                                      .dashBoardPageStyle
                                      .callHistoryItemStyle,
                                  noDataTextStyle: AppStyleConfig
                                      .dashBoardPageStyle.noDataTextStyle,
                                  createMeetLinkStyle: AppStyleConfig
                                      .dashBoardPageStyle.createMeetLinkStyle,
                                  recentCallsTitleStyle: AppStyleConfig
                                      .dashBoardPageStyle.titlesTextStyle,
                                  meetBottomSheetStyle: AppStyleConfig
                                      .dashBoardPageStyle
                                      .meetBottomSheetStyle,
                                )
                              ])));
                }),
              ),
            ),
          ),
        ),
      ));
}