ayushyaandClaude Sonnet 5 5dea9038f7 Make the shell top bar hide/reveal with scroll, per tab
Each regular tab (Files/Photos/Favorites/Shares/Recent/Activity/Trash)
now plants its own AppTopBar as the first sliver in its own
CustomScrollView, via a new topBarSliver() helper (tab_state_slivers.dart)
wrapping the framework's SliverFloatingHeader, instead of one shared
instance living in Scaffold.appBar.

This gives each tab's top bar Material's native floating-app-bar
behavior - tied to that tab's own ScrollController - scrolling away as
the list scrolls down and reappearing the moment the drag reverses,
not only once scrolled all the way back to the top, which a single
fixed Scaffold.appBar (or the "put it in a SliverToBoxAdapter" escape
hatch NooTopBar's doc comment already mentioned) can't do. It sits
above each tab's own pinned in-content sticky header (the sort/filter
row, or the selection bar that replaces it), which keeps working
unchanged underneath it.

main.dart builds a separate, correctly-labelled AppTopBar per tab
(rather than one for "whichever tab is selected") and passes it through
buildAppTabView's new optional topBar parameter; it's null on desktop
(which keeps its own NooToolbar) and while picking, matching the old
Scaffold.appBar: pickRequest == null guard.

SliverFloatingHeader sizes itself from the bar's own natural layout
(like SliverToBoxAdapter) rather than a fixed extent declared up front,
so NooTopBar's own internal SafeArea keeps handling the status-bar inset
correctly with no extra height math needed on this side.

Adds a widget test (test/widgets/tabs/tab_state_slivers_test.dart)
driving a raw gesture mid-drag to verify the reveal-follows-finger
behavior, since a single tester.drag() only pumps after the gesture -
including release - has already finished, which doesn't exercise the
live per-frame reveal this change depends on.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 16:28:36 -04:00
2026-09-26 01:51:58 -04:00
2026-09-26 01:51:58 -04:00
2026-09-15 11:54:26 -04:00

Noo

A fast, native Nextcloud client built with Flutter and Material You.

Noo gives you a clean, modern way to browse and manage the files on your own Nextcloud server — files, photos, shares, activity, and trash, all in one app, themed to match your device.

Features

  • Files — browse, upload, move, rename, delete, and favorite files and folders; sort and filter per folder
  • Photos — a dedicated media gallery with a full-screen viewer for images and video
  • Activity — a feed of what's changed on your server
  • Shares — see and manage what you've shared and what's shared with you
  • Trash — restore or permanently delete recently removed items
  • Material You theming — dynamic color on supported devices, five built-in accent colors, light/dark/AMOLED
  • Secure sign-in — authenticates via Nextcloud's Login Flow v2: you sign in through your browser, and Noo never sees or stores your password, only a scoped app token

Screenshots

Coming soon.

Getting started

Prerequisites:

  • Flutter (SDK ^3.12.2)
  • A Nextcloud server with Login Flow v2 enabled (on by default since Nextcloud 15)
flutter pub get
flutter run

On first launch, enter your server's address — Noo opens your browser to finish signing in.

Supported platforms

Android, iOS, and Windows.

Building

flutter build apk       # Android
flutter build ios       # iOS
flutter build windows   # Windows

Tech stack

Flutter with Material 3, provider for state management, and http/dio talking directly to Nextcloud's WebDAV and OCS APIs — no bundled Nextcloud SDK.

Contributing

Project context for contributors (human or AI) lives in CLAUDE.md and .claude/context/ — architecture, the server integration, styling conventions, and code standards.

flutter test      # run tests
flutter analyze   # static analysis / lints

License

Not yet licensed for redistribution — license TBD.

S
Description
No description provided
Readme
4.5 MiB
RC-iOS-1
Latest
2026-10-05 23:01:44 -04:00
Languages
Dart 77.1%
Kotlin 8.1%
HTML 7.5%
JavaScript 4.8%
C++ 1.5%
Other 0.9%