getAppBar method

PreferredSizeWidget? getAppBar(
  1. BuildContext context,
  2. CanvasNode node,
  3. WidgetBuildSettings settings
)

Implementation

PreferredSizeWidget? getAppBar(
  BuildContext context,
  CanvasNode node,
  WidgetBuildSettings settings,
) {
  if (node.properties.topAppBarPlaceholderId == null) return null;
  SinglePlaceholderNode appBarPlaceholderNode = getNode(
    node.properties.topAppBarPlaceholderId!,
  ) as SinglePlaceholderNode;
  final childId = appBarPlaceholderNode.childrenOrEmpty.firstOrNull;
  if (childId == null) return null;

  final BaseNode appBarNode = getNode(childId);

  final NodeWidgetTransformer<BaseNode> transformer = manager
      .getTransformerByNode(appBarNode);

  if (transformer is PassiveAppBarTransformer) {
    final Widget appBarChild = manager.buildWidgetFromNode(
      appBarNode as AppBarNode,
      context,
      settings: settings.copyWith(
        // Passes through to build a PreferredSizeWidget directly.
        buildRawWidget: true,
        brightness: node.properties.brightness,
      ),
    );

    assert(
      appBarChild is PreferredSizeWidget,
      'PassiveAppBarTransformer must return a PreferredSizeWidget',
    );

    return appBarChild as PreferredSizeWidget;
  } else {
    final Widget appBarChild = manager.buildWidgetFromNode(
      appBarNode,
      context,
      settings: settings.copyWith(brightness: node.properties.brightness),
    );

    return PreferredSize(
      preferredSize: Size.fromHeight(
        appBarPlaceholderNode.outerBoxLocal.height,
      ),
      child: SafeArea(child: appBarChild),
    );
  }
}