buildSidebarNavigation method

Widget buildSidebarNavigation(
  1. BuildContext context,
  2. SidebarMenu menu
)

build the sidebar and its children content

Implementation

Widget buildSidebarNavigation(BuildContext context, SidebarMenu menu) {
  Widget sidebar = _buildSidebar(context, menu);
  Widget? separator = _buildSidebarSeparator(menu);
  Widget content = Expanded(
    child: ListenableBuilder(
      listenable: viewGroupNotifier,
      builder: (context, _) {
        _ensureViewGroupIndexSyncedWithPayloads();
        final safe = pagePayloads.isEmpty
            ? 0
            : safeViewGroupPayloadIndex(
                viewGroupNotifier.viewIndex, pagePayloads.length);
        final screenPayload = pagePayloads[safe];
        final screen = ScreenController().getScreen(
          key: UniqueKey(),
          screenName: screenPayload.screenName,
          isExternal: screenPayload.isExternal,
          pageArgs: viewGroupNotifier.payload ?? screenPayload.arguments,
        );
        return menu.reloadView == true
            ? screen
            : IndexedStack(
                index: safe,
                children: pageWidgets,
              );
      },
    ),
  );
  // figuring out the direction to lay things out
  bool rtlLocale = Directionality.of(context) == TextDirection.rtl;
  // standard layout is the sidebar menu then content
  bool standardLayout = menu.atStart ? !rtlLocale : rtlLocale;

  List<Widget> children = [];
  if (standardLayout) {
    children.add(sidebar);
    if (separator != null) {
      children.add(separator);
    }
    children.add(content);
  } else {
    children.add(content);
    if (separator != null) {
      children.add(separator);
    }
    children.add(sidebar);
  }
  return Row(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: children,
  );
}