Fix avatar menu's missing border and put the tab title beside search
Build APK / build (push) Successful in 5m36s

- The avatar menu card's border was going missing wherever an opaque
  row sat against it (every corner but the header's) - a Container
  combining `border` with its own `clipBehavior` paints the border as
  part of the outer decoration, then the clipped child on top right up
  to the same boundary, with no gap for the border's stroke to show
  through. Fixed with the standard pattern: no clipBehavior on the
  bordered Container, a 1px-inset ClipRRect around the filled, clipped
  content instead.
- NooTopBar.androidTitleTrailing (renamed from androidTitleReplacement)
  now sits beside the tab title instead of replacing it - the title
  keeps its natural width (Flexible, ellipsizing only if truly out of
  room) with the inline search bar taking the remaining space to its
  right, rather than the title disappearing whenever search moves into
  the top bar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 02:16:30 -04:00
co-authored by Claude Sonnet 5
parent 9f47d0a3e3
commit fb4829d035
4 changed files with 147 additions and 101 deletions
+6 -6
View File
@@ -16,9 +16,9 @@ import 'shell/shell_common.dart';
/// title, then an inline search field that opens [SearchView].
/// - Android: `menu`, title, avatar actions. Upload has no top-bar icon
/// here - it's the [NooFab] `MainShellView` shows instead. When search
/// isn't in the bottom bar, the title itself is replaced by an inline
/// search-field-styled launcher (`androidTitleReplacement`) rather than
/// a bare search icon sitting beside it.
/// isn't in the bottom bar, an inline search-field-styled launcher
/// (`androidTitleTrailing`) sits to the title's own right, rather than a
/// bare search icon over in `actions`.
///
/// [style] is resolved by the caller (`NooLayout.navStyle`) rather than
/// read from context here, since [preferredSize] is a plain getter with no
@@ -68,9 +68,9 @@ class AppTopBar extends StatelessWidget implements PreferredSizeWidget {
? () => Scaffold.of(context).openDrawer()
: null,
// Android has no large title to put a second search row under the
// way iOS does (`search:` below) - an inline bar replaces the title
// itself instead of sitting beside it as a plain icon action.
androidTitleReplacement: !_ios && _showSearch
// way iOS does (`search:` below) - an inline bar sits beside the
// title instead, rather than a plain search icon over in `actions`.
androidTitleTrailing: !_ios && _showSearch
? const ShellSearchLauncher()
: null,
actions: [