問題描述
如何將數據傳遞給有狀態的小部件 (How to pass data to stateful widget)
當我嘗試將數據傳遞給有狀態小部件時,我收到此錯誤:
[State] 對象的配置是對應的 [StatefulWidget] 實例。該屬性在調用 [initState] 之前由框架初始化。在初始化程序中只能訪問靜態成員。
基本上我正在嘗試將數據從 detail.dart 傳遞到 about.dart
detail.dart :
class PokemonDetail extends StatefulWidget {
PokemonDetail({this.pokemon});
@override
_PokemonDetailState createState() => _PokemonDetailState();
}
class _PokemonDetailState extends State<PokemonDetail> with SingleTickerProviderStateMixin{
final List<TabData> _tabs = [
TabData("About", PokemonAbout(pokemon: widget.pokemon)),
....];
@override
_PokemonAboutState createState() => _PokemonAboutState();
}
Widget _buildTabContent() {
return Expanded(
child: TabBarView(
children: _tabs.map((tab) => tab.child).toList(),
),
);
}
about.dart :
class PokemonAbout extends StatefulWidget {
final Pokemon pokemon;
const PokemonAbout({this.pokemon, key}) : super(key: key);
參考解法
方法 1:
This line _PokemonAboutState createState() => _PokemonAboutState();
should not be called inside the State
class. It is already defined in the StatefulWidget
class. Try removing it and see what happens.
方法 2:
'widget.pokemon' cannot be used in class‑level field initialization. Try moving tabs declaration inside the initState:
class _PokemonDetailState extends State<PokemonDetail> with SingleTickerProviderStateMixin{
List<TabData> _tabs = [];
@override
void initState(){
super.initState();
_tabs = [ TabData("About", PokemonAbout(pokemon: widget.pokemon)), ....];
}
I hope this helps!
(by Megumin、Karim Elghamry、digitaljoni)