如何在没有 Scroll 小部件的情况下使用 RefreshIndicator?

问题描述 投票:0回答:2

我正在尝试使用 RefreshIndicator,但如果不使用滚动小部件,我将无法使用它。我的目标是仅显示文本小部件并添加拉动刷新功能。

 if (snapshot.data.isEmpty) {
            return RefreshIndicator(
              onRefresh: () async {
                _init();
              },
              child: Center(
                child: Text('No data'),
              ),
            );
          }

我已将

Text('No data')
小部件包装在 SingleChildScrollView 中,但它不起作用。我的解决方案现在如下,但看起来很丑。有更好的方法吗?

  if (snapshot.data.isEmpty) {
            return RefreshIndicator(
              onRefresh: () async {
                _init();
                print('we scrolled');
              },
              child: Center(
                child: ListView.builder(
                  itemCount: 1,
                  itemBuilder: (context, index) {
                    return Text('No data\nPull to Refresh');
                  },
                ),
              ),
            );
          }

enter image description here

flutter
2个回答
2
投票

将物理设置为始终可滚动

ListView.builder(
              physics:AlwaysScrollableScrollPhysics(),
              itemCount: 1,
              itemBuilder: (context, index) {
                return Text('No data\nPull to Refresh');
              },
            )

0
投票

我创建了一个多功能的 SmartRefreshIndicator 小部件,可以与

一起使用

可滚动和不可滚动的子部件。

它非常适合在各种 UI 元素中集成下拉刷新功能,例如 ListViewColumn 或任何需要刷新功能的小部件。

class SmartRefreshIndicator extends StatelessWidget {
  final Future<void> Function() onRefresh;
  final Widget child;
  final bool isChildScrollable;

  const SmartRefreshIndicator({
    super.key,
    required this.onRefresh,
    required this.child,
    this.isChildScrollable = false,
  });

  @override
  Widget build(context) {
    return LayoutBuilder(
      builder: (context, constraints) => RefreshIndicator(
        onRefresh: onRefresh,
        child: isChildScrollable
            ? child
            : SingleChildScrollView(
                physics: const AlwaysScrollableScrollPhysics(),
                child: SizedBox(
                  height: constraints.maxHeight,
                  child: child,
                ),
              ),
      ),
    );
  }
}

您可以随意扩展和自定义它以满足您的特定需求!

© www.soinside.com 2019 - 2024. All rights reserved.