flutter - RefreshIndicator 不适用于 SingleChildScrollView 作为子项

标签 flutter dart

我正在尝试使用 RefreshIndicator重新加载我在主屏幕上显示的列表。代码看起来类似于:

class Home extends StatefulWidget {
  @override
  _StartHomeState createState() => _StartHomeState();
}

class _StartHomeState extends State<Home> {
  EventsList events;

  @override
  void initState() {
    super.initState();
    events = EventsList();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomPadding: false,
      body: RefreshIndicator(
        onRefresh: resfreshEventList,
        child: SingleChildScrollView(
          physics: AlwaysScrollableScrollPhysics(),
          child: Column(
            children: [
              HomeTopBar(),
              events,
            ],
          ),
        ),
      ),
    );
  }

  Future<Null> resfreshEventList() async {
    await Future.delayed(Duration(seconds: 2));

    setState(() {
      events = EventsList();
    });
    return null;
  }
}
EventsList是另一个有状态的小部件,它将调用 API 并将响应映射到小部件列表。我试过设置 physics SingleChildScrollView 的属性(property)如此处所述:https://github.com/flutter/flutter/issues/22180但没有运气。使用 ListView而不是 SingleChildScrollView也不起作用。

最佳答案

在这个例子中它似乎工作正常当我拉动刷新然后 resfreshEventList被解雇,还有 setState工作没有任何问题。

这是我正在使用的代码:

import 'package:flutter/material.dart';

class Home extends StatefulWidget {
  @override
  _StartHomeState createState() => _StartHomeState();
}

class _StartHomeState extends State<Home> {
  // EventsList events;
  int number = 0;

  @override
  // void initState() {
  //   super.initState();
  //   events = EventsList();
  // }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      appBar: AppBar(
        title: Text("RefreshIndicator Example"),
      ),
      resizeToAvoidBottomPadding: false,
      body: RefreshIndicator(
        onRefresh: resfreshEventList,
        child: SingleChildScrollView(
          physics: AlwaysScrollableScrollPhysics(),
          child: Column(
            children: [
              // HomeTopBar(),
              // events,
              Container(
                height: 200,
                width: 200,
                color: Colors.red,
                child: Center(
                  child: Text(number.toString()),
                ),
              ),
              Divider(),
              Container(
                height: 200,
                width: 200,
                color: Colors.red,
                child: Center(
                  child: Text(number.toString()),
                ),
              ),
              Divider(),
              Container(
                height: 200,
                width: 200,
                color: Colors.red,
                child: Center(
                  child: Text(number.toString()),
                ),
              ),
              Divider(),
              Container(
                height: 200,
                width: 200,
                color: Colors.red,
                child: Center(
                  child: Text(number.toString()),
                ),
              ),
              Divider(),
              Container(
                height: 200,
                width: 200,
                color: Colors.red,
                child: Center(
                  child: Text(number.toString()),
                ),
              )
            ],
          ),
        ),
      ),
    ));
  }

  Future<Null> resfreshEventList() async {
    // await Future.delayed(Duration(seconds: 2));

    // setState(() {
    //   events = EventsList();
    // });
    setState(() {
      number = number + 1;
    });
    print("Refresh Pressed");
    return null;
  }
}


输出:

enter image description here

关于flutter - RefreshIndicator 不适用于 SingleChildScrollView 作为子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62096268/

相关文章:

flutter - 如何制作中心较大的旋转木马? ( flutter )

dart - Flutter:自定义步进器

flutter - Flutter Bloc-按钮未触发状态更改

flutter - 空集状态有什么意义呢?

firebase - 有没有办法让 firebase 实时数据库存在系统更快地检测到断开连接

dart - Flutter getter 没有为类指定,当它被指定时

flutter - 如何在 flutter 中使用精度对整数进行舍入

dart - 在单独的 BottomNotifcationBar 类中使用 setState 返回到主类

dart - 如何在 WebStorm 中使用断点调试 Dart Builders

flutter - flutter 怎么办