Shrink notification and device list page sizes on phones

On phone-width layouts (< Breakpoints.medium) the notification and device
lists now request fewer items per page so the list and its pagination bar
fit on screen together on common current phones. Notifications use 4 items
and devices 6 on phones; wider layouts keep 5 and 10 respectively. The
initial fetch is deferred to didChangeDependencies so the page size can read
the screen width from MediaQuery.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
rzuasti
2026-06-04 18:13:37 -04:00
co-authored by Claude Opus 4.8
parent 8b8fa5ce89
commit 0a899b7890
4 changed files with 40 additions and 10 deletions
+16 -2
View File
@@ -17,7 +17,11 @@ import 'device_list_filter.dart';
import 'device_list_rows.dart';
import 'device_list_sort.dart';
const _pageSize = 10;
// Phones show fewer devices so the list and its pagination controls fit on
// screen at once on the common current phones (e.g. iPhone 15, Pixel 8); the
// wider table layout has the vertical room for a full page.
const _phonePageSize = 6;
const _widePageSize = 10;
class DeviceList extends StatefulWidget {
const DeviceList({super.key});
@@ -40,14 +44,18 @@ class _DeviceListState extends State<DeviceList> with RouteAware {
int _currentPage = 0;
bool _hasNextPage = false;
bool _didInitialFetch = false;
CancelToken? _fetchToken;
final ScrollController _scrollController = ScrollController();
int get _pageSize => MediaQuery.sizeOf(context).width < Breakpoints.medium
? _phonePageSize
: _widePageSize;
@override
void initState() {
super.initState();
_ownerController.addListener(_onOwnerChanged);
_fetchPage(0);
}
@override
@@ -57,6 +65,12 @@ class _DeviceListState extends State<DeviceList> with RouteAware {
if (route is ModalRoute<void>) {
routeObserver.subscribe(this, route);
}
// Deferred from initState so the page size can read the screen width from
// MediaQuery, which is only available once dependencies are in place.
if (!_didInitialFetch) {
_didInitialFetch = true;
_fetchPage(0);
}
}
@override