3
그래서 사용자를위한 알림을 표시하는 "알림"화면이 있습니다. 이 화면으로 이동할 때 알림은 백엔드 API에서 실시간으로로드되므로 공백으로 표시됩니다. 여기 백엔드 API에서 데이터를 대기하는 동안 RefreshIndicator를 처음으로 표시하는 방법은 무엇입니까?
문제를 설명하기 위해 몇 가지 코드입니다 :class _MyItemsPageState extends State<MyItemsPage> {
final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
new GlobalKey<RefreshIndicatorState>();
List<MyItem> _items = [];
@override
void initState() {
super.initState();
// Nothing is displaying on screen initially, since the items are loaded from API on startup.
// Preferably in this state, the refresh indicator would be shown while the items load.
// It's not currently possible in this place, since it seems that the Widget hasn't been built yet.
_refreshIndicatorKey.currentState.show(); // currentState null at this time, so the app crashes.
_loadItems();
}
// (unrelated code removed)
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new RefreshIndicator(
key: _refreshIndicatorKey,
onRefresh: _loadItems,
child: new ListView(
padding: new EdgeInsets.symmetric(vertical: 8.0),
children: _buildItemWidgets(),
),
),
);
}
}
문제는 initState() 함수가 호출 될 때 위젯이 내장되지 않은 이후 _refreshIndicator.currentState가 null이다 아직.
show()을이 경우 RefreshIndicator에 호출하는 적절한 장소는 무엇입니까?
결국,'_loadItems()'함수 안에'_refreshIndicator.currentState.show()'를 넣는 것이 트릭을 만들었습니다. 다음과 같이 표시됩니다. 'Future _loadItems() async { _refreshIndicatorKey.currentState? .show(); var items = await getItems(); setState (() { _items = items; }); }' "가장 권장되는"방법인지는 모르겠지만, 적어도 그것이 작동하는 것은 확실합니다. ¯ \\ _ (ツ))// 나는 이것이 선호되는 방법인지 계속 알고 있습니다. –
자신 만의 질문에 스스로 대답 할 수 있습니다. 아래 공식적으로 답변 해 주시겠습니까? –