[英]How to add refresh indicator outside stream builder flutter
我正在嘗試在我的 streambuilder 小部件中添加拉動以刷新。這是我到目前為止嘗試過的部分代碼
@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>();
您需要將刷新指示器放入 stream 構建器中:
@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()
以使其工作。
是的,你需要一個可滾動的孩子。 在 RefreshIndicator 之后放置一個 SingleChildScrollView,它應該可以工作
過去,當我在返回構建器的 ListView 中分配配置錯誤的 ScrollController 時,我遇到了這個問題。 一旦我刪除了 ScrollController,就會顯示循環刷新指示器,並調用 onRefresh。
我不必使用 SingleChildScrollView
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.