Fix five Android nav/shell UX issues

- Bottom bar: labels now sit below each icon instead of beside it, and
  the active-tab pill is one shared indicator that slides between tabs
  instead of popping in/out per item.
- Upload FAB stays mounted across every tab and collapses to an
  icon-only circle off Files/Photos, instead of the Scaffold popping it
  fully in/out on every tab switch.
- Tapping the top-bar avatar now opens the accounts sheet instead of
  jumping straight to Settings.
- Settings tab reordering only starts a drag from the grip icon now -
  previously the whole row claimed vertical drags, so scrolling the
  section could trigger an accidental reorder.
This commit is contained in:
2026-09-28 12:08:23 -04:00
parent d2c34b000f
commit 800e8ebf44
9 changed files with 488 additions and 117 deletions
+11 -5
View File
@@ -74,8 +74,7 @@ void main() {
SyncStatusController(context.read(), context.read()),
),
ChangeNotifierProvider(
create: (context) =>
PhotosController(context.read(), context.read()),
create: (context) => PhotosController(context.read(), context.read()),
),
ChangeNotifierProvider(
create: (context) =>
@@ -481,9 +480,16 @@ class _MainShellViewState extends State<MainShellView> {
: null,
drawer: pickRequest == null ? const AppDrawer() : null,
// Android-only extended Upload FAB - iOS uses the top bar's `plus`
// instead (see AppTopBar).
floatingActionButton: canUpload && navStyle == NooNavStyle.android
? NooFab(onTap: () => showCreateMenu(context))
// instead (see AppTopBar). Stays mounted across every tab (picking
// aside) and collapses to an icon-only circle off Files/Photos,
// rather than the Scaffold popping it fully in/out on every tab
// switch - see NooFab's [collapsed].
floatingActionButton:
pickRequest == null && navStyle == NooNavStyle.android
? NooFab(
collapsed: !canUpload,
onTap: () => showCreateMenu(context),
)
: null,
body: tabStack,
bottomNavigationBar: BottomNavBar(