Flutter 为什么在我的小部件上传递的参数为空?

Flutter 为什么在我的小部件上传递的参数为空?,flutter,Flutter,我是个新手。因此,我在下面创建了一个类小部件代码 import 'package:flutter/material.dart'; class BoxBuilder extends StatefulWidget { BoxBuilder({Key key, @required this.text}): super(key: key); String text; @override _BoxBuilderState createState() => _BoxBuilderS

我是个新手。因此,我在下面创建了一个类小部件代码

import 'package:flutter/material.dart';

class BoxBuilder extends StatefulWidget {
  BoxBuilder({Key key, @required this.text}): super(key: key);
  String text;

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

class _BoxBuilderState extends State<BoxBuilder>  {
  _BoxBuilderState({this.text});

  String text;

  double getSize() {
    if (MediaQuery.of(context).orientation == Orientation.portrait) {
      return MediaQuery.of(context).size.width - 120;
    } else {
      return MediaQuery.of(context).size.height - 120;
    }
  }

  @override
  Widget build(BuildContext context) {
    double _width = getSize() / 2;
    double _height = getSize() / 3;
    return Container(
      width: _width,
      height: _height,
      child: Card(
        color: Colors.white,
        child: Center(
          child: Padding(
            padding: EdgeInsets.all(10.0),
            child: Text(
              text==null? 'hello': text,   // LINE 1100
            ),
          ),
        ),
      ),
    );
  }
}

当我得到这个结果时,传递的参数似乎是空的

如果我替换BoxBuilder小部件类中的第1100行

            child: Text(
              text==null? 'hello': text,   // LINE 1100
            ),
仅仅

            child: Text(
              text,   // LINE 1100
            ),
我得到这个错误

   A non-null String must be provided to a Text widget.
从第1001、1002行调用。。。1006

我在这里摸不着头脑,它只是传递参数,为什么我会得到一个空值?

既然您使用的是StatefulWidget,那么请尝试widget.text

子:文本 widget.text??'您好,//第1100行 , 也可以删除这些线,因为它们不需要

_BoxBuilderState{this.text}; 字符串文本; 由于您使用的是StatefulWidget,请改为尝试widget.text

子:文本 widget.text??'您好,//第1100行 , 也可以删除这些线,因为它们不需要

_BoxBuilderState{this.text}; 字符串文本;
这里有两个问题

您重新声明变量文本,因此使用新的变量值,该值为null 因为您使用的是StatefulWidget,所以通过widget.param使用它的参数 试试这个

进口“包装:颤振/材料.省道”; 类BoxBuilder扩展了StatefulWidget{ BoxBuilder{Key Key,@required this.text}:superkey:Key; 字符串文本; @凌驾 _BoxBuilderState createState=>\u BoxBuilderState; } 类BoxBuilderState扩展状态{ 双倍getSize{ 如果MediaQuery.ofcontext.orientation==orientation.Parative{ 返回MediaQuery.ofcontext.size.width-120; }否则{ 返回MediaQuery.ofcontext.size.height-120; } } @凌驾 小部件构建上下文上下文{ 双宽度=getSize/2; 双倍高度=getSize/3; 返回容器 宽度:_宽度, 高度:_高度, 孩子:卡片 颜色:颜色,白色, 儿童:中心 孩子:填充 填充:EdgeInsets.所有10.0, 子:文本 widget.text??“你好”, , , , , ; } } 注意:dart提供了检查空数据的更好方法

widget.text ?? 'hello',

这里有两个问题

您重新声明变量文本,因此使用新的变量值,该值为null 因为您使用的是StatefulWidget,所以通过widget.param使用它的参数 试试这个

进口“包装:颤振/材料.省道”; 类BoxBuilder扩展了StatefulWidget{ BoxBuilder{Key Key,@required this.text}:superkey:Key; 字符串文本; @凌驾 _BoxBuilderState createState=>\u BoxBuilderState; } 类BoxBuilderState扩展状态{ 双倍getSize{ 如果MediaQuery.ofcontext.orientation==orientation.Parative{ 返回MediaQuery.ofcontext.size.width-120; }否则{ 返回MediaQuery.ofcontext.size.height-120; } } @凌驾 小部件构建上下文上下文{ 双宽度=getSize/2; 双倍高度=getSize/3; 返回容器 宽度:_宽度, 高度:_高度, 孩子:卡片 颜色:颜色,白色, 儿童:中心 孩子:填充 填充:EdgeInsets.所有10.0, 子:文本 widget.text??“你好”, , , , , ; } } 注意:dart提供了检查空数据的更好方法

widget.text ?? 'hello',

从state到component的参数访问是通过state类中的widget实例完成的。在私有状态类中不需要新的构造函数。从状态到组件的参数访问是通过状态类中的小部件实例完成的。在私有状态类中不需要新的构造函数。
widget.text ?? 'hello',