Обновление списка RefreshIndicator в Flutter
Жест «потянуть вниз» для обновления данных
даёт
RefreshIndicator.
Его кладут поверх прокручиваемого виджета -
чаще всего
ListView
или SingleChildScrollView.
Колбэк onRefresh обязан вернуть
Future. Пока Future не завершится,
крутится индикатор у верхнего края. После
успеха обновите список через
setState:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: RefreshDemoPage()));
}
class RefreshDemoPage extends StatefulWidget {
const RefreshDemoPage({super.key});
@override
State<RefreshDemoPage> createState() => _RefreshDemoPageState();
}
class _RefreshDemoPageState extends State<RefreshDemoPage> {
final items = <String>['First entry', 'Second entry'];
int stamp = 0;
Future<void> reload() async {
await Future<void>.delayed(const Duration(seconds: 1));
if (!mounted) return;
setState(() {
stamp++;
items.add('Update #$stamp');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Refresh')),
body: RefreshIndicator(
onRefresh: reload,
child: ListView.builder(
physics: const AlwaysScrollableScrollPhysics(), // short list can refresh
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(title: Text(items[index]));
},
),
),
);
}
}
При обновлении добавляйте в начало списка
строку с текущим временем
DateTime.now(). Задержка имитации -
800 ms. Минимум три элемента на экране.