refresh method
Re-read page 1 in place (the sync-edge refresh — a newly arrived/confirmed tx). Keeps the CURRENT rows visible until the fresh page lands, so a transient busy-DB fault never blanks a populated history (last-known-through-error).
Implementation
Future<void> refresh() async {
// DO NOT collapse a deep-loaded (multi-page) list. The sync `reachedTip` edge
// re-fires roughly per block while a synced wallet is open (~every block at the
// tip), so a wholesale page-1 re-read here would YANK the accumulated pages back
// to 50 rows every ~block and lose the user's place. The single-page common case
// still auto-refreshes (no tail to drop). A REAL arrival must NOT ride this
// guard — that is [collapseToFirstPage]'s job (U1: without it a
// deep-paged list was a session-durable dead zone where a new payment never
// appeared at all). The balance still updates live via
// `walletSnapshotProvider` (refreshed on the same edges).
if (state.rows.length > walletActivityPageSize) return;
await _reloadFirstPage();
}