Flutter 颤振小部件及其状态:鸡和蛋的问题

Flutter 颤振小部件及其状态:鸡和蛋的问题,flutter,dart,widget,Flutter,Dart,Widget,正如您在下面的代码中所看到的,createState()在MyWidget的构造函数完成后运行,因此关键字可用 但是,尽管MyWidgetState的构造函数在MyWidget的构造函数之后运行,在前者中取消对print()的注释失败。小部件似乎没有准备好 如果鸡和蛋的问题得到了明确的解决:首先创建小部件,为什么状态不能在其自己的构造函数中访问小部件变量小部件在build()中访问很好 import 'package:flutter/material.dart'; void main() =&

正如您在下面的代码中所看到的,
createState()
MyWidget
的构造函数完成后运行,因此
关键字
可用

但是,尽管
MyWidgetState
的构造函数在
MyWidget
的构造函数之后运行,在前者中取消对
print()
的注释失败。
小部件
似乎没有准备好

如果鸡和蛋的问题得到了明确的解决:首先创建小部件,为什么状态不能在其自己的构造函数中访问小部件变量<代码>小部件在
build()中访问
很好

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: MyWidget(keyword: 'keyword'),
      ),
    );
  }
}

class MyWidget extends StatefulWidget {
  final String keyword;

  MyWidget({Key key, this.keyword}) : super(key: key) {
    print('In _MyWidget(): ${keyword}');
  }

  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  _MyWidgetState() {
    // print('In _MyWidgetState(): ${widget.keyword}');
  }

  @override
  Widget build(BuildContext) {
    return Text(widget.keyword);
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
正文:MyWidget(关键字:“关键字”),
),
);
}
}
类MyWidget扩展了StatefulWidget{
最后一个字符串关键字;
MyWidget({Key-Key,this.keyword}):超级(Key:Key){
打印('In _MyWidget():${keyword}');
}
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
_MyWidgetState(){
//打印('In_MyWidgetState():${widget.keyword}');
}
@凌驾
小部件构建(构建上下文){
返回文本(widget.keyword);
}
}

这可能回答您的问题,也可能不回答您的问题,但您需要使用
initState
,而不是尝试使用
\u MyWidgetState
的构造函数执行任何操作。这是小部件有状态部分中发生的第一件事,也是在构建方法之前发生的第一件事

class MyWidget extends StatefulWidget {
  final String keyword;

  MyWidget({Key key, this.keyword}) : super(key: key) {
    print('In _MyWidget(): ${keyword}');
  }

  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {

  @override
  void initState() {
    super.initState();
    print('In _MyWidgetState(): ${widget.keyword}'); // this will print
  }

  @override
  Widget build(BuildContext context) {
    return Text(widget.keyword);
  }
}
类MyWidget扩展了StatefulWidget{
最后一个字符串关键字;
MyWidget({Key-Key,this.keyword}):超级(Key:Key){
打印('In _MyWidget():${keyword}');
}
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
@凌驾
void initState(){
super.initState();
打印('In _MyWidgetState():${widget.keyword}');//这将打印
}
@凌驾
小部件构建(构建上下文){
返回文本(widget.keyword);
}
}