flutter - Flutter ListView EmptyState 刷新
问题描述
我的应用中有一个带有 ListView 的页面。我正在使用 StreamBuilder 来接收数据。当有数据时,我构建 listview 子项,并且 listview 包装在 RefreshIndicator 中。这工作正常。
现在我想处理没有数据又名 EmptyState 的情况。能够显示一个包含一些内容的容器,同时仍然能够支持拉刷新以强制页面/列表视图检查数据。
这就是我目前正在做的事情
return RefreshIndicator(
key: upcomingRefreshIndicatorKey,
onRefresh: handleRefresh,
child: snapshot.hasData ? list : Stack(children: <Widget>[list, emptystate],) ,
);
我不确定这是使用 ListView 处理 EmptyState 的方法,但到目前为止,这是我看到的在列表为空时仍然支持刷新的唯一方法。所以我的主要问题是如何最好地使用 LIstView 处理空状态并仍然支持 PullToRefresh?
解决方案
要在空的ListView中支持RefreshIndicator ,您可以设置. 这使得总是可滚动的。因此,我们总是可以触发.physics: AlwaysScrollableScrollPhysics()
ListView
RefreshIndicator
为空Container
时要显示的ListView
可以通过两种方法完成:
- 如果您的数据为空(或 null),请将 替换
ListView
为SingleChildScrollView并physics
设置为AlwaysScrollableScrollPhysics()
。然后你可以把你的Container
作为孩子SingleChildScrollView
。 - 鉴于您的数据为空(或空),
ListView
您可以简单地用您的 替换孩子,而不是替换。Container
在以下独立示例中,我采用了第二种方法:
import 'dart:async';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
// dummy stream
StreamController<List<String>> yourStream = StreamController<List<String>>();
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: RefreshIndicator(
onRefresh: refresh,
child: StreamBuilder<List<String>>(
stream: yourStream.stream,
builder: (_, snapshot) => ListView(
physics: AlwaysScrollableScrollPhysics(), // This makes it always scrollable!
children: snapshot.data == null
? [Text('Nothing here :(')]
: snapshot.data
.map((text) => ListTile(
title: Text(text),
))
.toList()),
),
),
),
),
);
}
Future<void> refresh() {
// dummy code
yourStream.add(['Quick', 'Brown', 'Fox']);
return Future.value();
}
}
推荐阅读
- python - Selenium ConnectionRefusedError: [WinError 10061] 由于目标机器主动拒绝,无法建立连接
- javascript - 如何在新 vue 之后设置 vue-data 并进行数据绑定
- c++ - 我的二叉搜索树的实现不起作用,因为我不断收到我的节点和 typedef 项目未定义的错误
- maven - 如何从(传递)依赖项中排除一些包?
- assembly - SCASD 找不到字符串
- javascript - jQuery ajax 不发送响应
- python - requests.post 从 python 脚本到我使用 Apache 托管的 Django 网站,给出 403 Forbidden
- hadoop - HUE 文件管理器,能够创建 HDFS 子目录/文件夹但无法上传文件到 HDFS
- javascript - 将 JSON 文件显示为 HTML
- javascript - 如何在处理 javascript 函数时显示消息?