如何在流生成器颤振之外添加刷新指示器



我正在尝试在我的流构建器小部件中添加拉取以刷新.. 这是我迄今为止尝试过的代码的一部分

@override
Widget build(BuildContext context) {
return RefreshIndicator(
key: _refreshIndicatorKey,
onRefresh: _handleRefresh,
child: StreamBuilder<DataModel>(
stream: dataBloc.subject.stream,
builder: (context, AsyncSnapshot<DataModel> snapshot) {
if (snapshot.hasData) {
return passData(snapshot.data);
} else if (snapshot.hasError) {
return .....
} else {
return ......
}
}),
);
}
Future<void> _handleRefresh() async {
try {
bool trustSelfSigned = true;
HttpClient httpClient = new HttpClient()
..badCertificateCallback =
((X509Certificate cert, String host, int port) => trustSelfSigned);
IOClient http = new IOClient(httpClient);
final response = await http.post('...',
headers: {
HttpHeaders.contentTypeHeader: 'application/json',
},
body: json.encode({...}));
Map<String, dynamic> responseJson = json.decode(response.body);
return;
} catch (ex) {
print(ex.message);
}
}

但是每当我尝试向下滑动时...我看不到刷新指示器的重新加载图标。有什么我应该添加更多的东西吗? 我也添加了此代码

final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
GlobalKey<RefreshIndicatorState>();

您需要将刷新指示器放在流构建器中:

@override
Widget build(BuildContext context) {
return StreamBuilder<DataModel>(
stream: dataBloc.subject.stream,
builder: (context, AsyncSnapshot<DataModel> snapshot) {
if (snapshot.hasData) {
return Expanded(
child: RefreshIndicator(
child: methodToHandleTheData(snapshot.data)
)
);
} else if (snapshot.hasError) {
return .....
} else {
return ......
}
}
);
}
Widget methodToHandleTheData(DataModel data) {
return SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(),
child: MyAwesomeWidget(data)
);
}

RefreshIndicator 的第一个子项必须是可滚动的小部件,即 SingleChildScrollView 或 ListView,并且还需要添加参数physics: const AlwaysScrollableScrollPhysics()才能使其工作。

是的,你需要一个可滚动的孩子。在刷新指示器之后放置一个 SingleChildScrollView,它应该可以工作

过去,当我在返回构建器的 ListView 中分配了一个配置错误的 ScrollController 时,我遇到了这个问题。删除 ScrollController 后,将显示循环刷新指示器,并调用 onRefresh。

我不必使用SingleChildScrollView。

最新更新