// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flutter code sample for RefreshIndicator import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); static const String _title = 'RefreshIndicator Sample'; @override Widget build(BuildContext context) { return const MaterialApp( title: _title, home: RefreshIndicatorExample(title: _title), ); } } class RefreshIndicatorExample extends StatefulWidget { const RefreshIndicatorExample({Key? key, required this.title}) : super(key: key); final String title; @override State<RefreshIndicatorExample> createState() => _RefreshIndicatorExampleState(); } class _RefreshIndicatorExampleState extends State<RefreshIndicatorExample> { final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey = GlobalKey<RefreshIndicatorState>(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: RefreshIndicator( key: _refreshIndicatorKey, color: Colors.white, backgroundColor: Colors.blue, strokeWidth: 4.0, onRefresh: () async { // Replace this delay with the code to be executed during refresh // and return a Future when code finishs execution. return Future<void>.delayed(const Duration(seconds: 3)); }, // Pull from top to show refresh indicator. child: ListView.builder( itemCount: 25, itemBuilder: (BuildContext context, int index) { return ListTile( title: Text('Item $index'), ); }, ), ), floatingActionButton: FloatingActionButton.extended( onPressed: () { // Show refresh indicator programmatically on button tap. _refreshIndicatorKey.currentState?.show(); }, icon: const Icon(Icons.refresh), label: const Text('Show Indicator'), ), ); } }