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()时,它将重新运行。