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',