我有一個看起來像這樣的狀態,我_getData在initState 中呼叫方法
class _DataPageState extends State<DataPage> {
@override
void initState() {
super.initState();
_selectedEvents = ValueNotifier(_getData(value!));
}
@override
void dispose() {
_selectedEvents.dispose();
super.dispose();
}
List<dynamic> _getData(DateTime value) {
//trying to access 'events' variable here
return events[day] ?? [];
}
我的構建方法看起來像這樣
@override
Widget build(BuildContext context) {
final _source = toResults(data);
//'events' variable I'm trying to pass
final events = LinkedHashMap<DateTime, List<dynamic>>(
equals: isSameDay,
hashCode: getHashCode,
)..addAll(_source);
}
我試圖將events變數傳遞給我_getData在 state 內的方法,以便能夠在initState內運行它,有沒有合適的方法來做到這一點?
如果沒有,是否有辦法將最終變數向上移動而不會出現“實體成員無法在初始化程式中訪問”的問題?
uj5u.com熱心網友回復:
您的build方法應該是“純”的,這意味著它不應該有副作用,因為 Flutter 可以在需要重建小部件樹時呼叫它(例如,如果出現鍵盤,如果更改為橫向模式,因為父項重建等)。
在 Dart 中,如果你有一個變數在第一次使用之前會被初始化,但不能立即初始化,你可以使用late關鍵字。也許這樣的事情會奏效:
class MyState extends State<MyWidget> {
late LinkedHashMap<DateTime, List<dynamic>> _events; // late means no initializer needed
@override
void initState() {
super.initState();
final _source = toResults(data);
_events = LinkedHashMap<DateTime, List<dynamic>>(
equals: isSameDay,
hashCode: getHashCode,
)..addAll(_source);
}
// other stuff
}
不完全清楚data來自哪里,但如果它可以從樹的更高處傳入,您可以將其設為Widget類的屬性并用于widget.data在內部安全地讀取它initState()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335687.html
