🧛‍♂️

【Flutter】下スクロールでデータを更新して表示させたい(RefreshIndicator)

2022/04/11に公開

1. 目標とする画面

今回は、下スクロールした際に配列に要素を追加する処理を実装したいと思います。

2. 配列の要素をリスト形式で表示しよう

まずは、配列の要素をリスト形式で表示してみましょう。
animalListには、動物の名前が格納されています。
そして、その名前をText()で表示しています。

List<String> animalList = ['cat', 'dog', 'elephant'}


  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView.builder(
          itemCount: animalList.length,
          itemBuilder: (BuildContext context, int index) {
            return Text(animalList[index]);
          }
        ),
    );
  }

3. RefreshIndicatorで囲ってみよう

次に、ListViewをRefreshIndicatorで囲ってみましょう。
そして、onRefreshプロパティに処理を記載してみましょう。
今回は、animalListに'rabbit'という文字列を追加する処理を記載しました。


  Widget build(BuildContext context) {
    return Scaffold(
      body: RefreshIndicator(
        onRefresh: () async {
          // 更新したい処理を書く
          setState(() {
            animalList.add('rabbit');
          });
        },
        child: ListView.builder(
          itemCount: animalList.length,
          itemBuilder: (BuildContext context, int index) {
            return Text(animalList[index]);
          }
        ),
      ),
    );
  }

画面を下にスクロールすることで、'rabbit'も表示されるようになりました。

4. ソースコードの全体像

https://github.com/John-Thailand/refresh_sample
main.dart

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> animalList = ['cat', 'dog', 'elephant'];

  
  Widget build(BuildContext context) {
    return Scaffold(
      body: RefreshIndicator(
        onRefresh: () async {
          // 更新したい処理を書く
          setState(() {
            animalList.add('rabbit');
          });
        },
        child: ListView.builder(
          itemCount: animalList.length,
          itemBuilder: (BuildContext context, int index) {
            return Text(animalList[index]);
          }
        ),
      ),
    );
  }
}

Discussion