Flutter initState函数是';默认情况下,不能在StatefulWidget中调用

Flutter initState函数是';默认情况下,不能在StatefulWidget中调用,flutter,Flutter,谢谢你的关注。我是颤振的初学者。我不知道为什么默认情况下不调用initState函数。由于打印(列表[0])语句无法运行 import 'package:flutter/material.dart'; import 'main_page/main_page.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { // This widget is the root of your ap

谢谢你的关注。我是颤振的初学者。我不知道为什么默认情况下不调用
initState
函数。由于打印(列表[0])语句无法运行

import 'package:flutter/material.dart';
import 'main_page/main_page.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _MyHomePage();
}

class _MyHomePage extends State<MyHomePage> {
  int _currentIndex = 0;
  List<Widget> list = List();

  @override
  void initState() {
    list.add(MainPage());
    print(list[0]);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: MainPage(),
      bottomNavigationBar: BottomNavigationBar(
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            title: Text('Home')
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.person),
            title: Text('Me')
          ),
        ],
        currentIndex: _currentIndex,
        onTap: (int index) {
          setState(() {
            _currentIndex = index;
          });
        },
        type: BottomNavigationBarType.fixed,
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“主页面/主页面.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
State createState()=>\u MyHomePage();
}
类(扩展状态){
int _currentIndex=0;
List=List();
@凌驾
void initState(){
list.add(MainPage());
打印(列表[0]);
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:主页(),
底部导航栏:底部导航栏(
项目:[
底部导航气压计(
图标:图标(Icons.home),
标题:文本(“主页”)
),
底部导航气压计(
图标:图标(Icons.person),
标题:文本(“我”)
),
],
currentIndex:_currentIndex,
onTap:(int索引){
设置状态(){
_currentIndex=索引;
});
},
类型:BottomNavigationBarType.fixed,
),
);
}
}

我尝试了你的代码,但它仍然正常打印。请确保重新运行代码,不要进行热重新加载,因为initState()只调用一次。文件说:

框架将为其创建的每个[State]对象调用此方法一次

我从initState()的文档中选择了一件事,您应该遵循:

如果重写此项,请确保方法以调用super.initState()开始

这意味着您必须将所有代码置于super.initState()下,如下所示:

@override
void initState() {
    super.initState();

    list.add(MainPage());
    print('initState() ---> ${list[0]}'); // This will print "initState() ---> MainPage"
}

主页()是什么?你怎么知道initState()没有被调用?
MainPage()
是一个小部件。由于
打印(列表[0]),
语句无法调用。我在我这边尝试了你的代码,它正常打印了我的所有控制台显示,如下所示。
正在执行热重新加载。。。正在将文件同步到设备iPhone XR。。。在822ms内重新加载了420个库中的0个可以尝试重新运行,而不是热加载。因为initSate只被调用一次。另外,请尝试下面的答案。>请确保重新运行代码,不要进行热重新加载,因为initState()只调用一次。我不确定这是真的了?我刚刚检查过,当我热重新加载initState()时,它将重新运行。