【发布时间】:2021-10-29 13:00:13
【问题描述】:
我遇到了一个问题,即在构造它的状态类时我需要在其状态类中使用 StatefulWidget 参数,但由于在状态的类构造函数中使用 widget.[whatever variable name] 会返回意外的空值,因此我找不到方法来执行此操作,并且 initState 函数仅在小部件被绘制到屏幕时运行。
例如:
import 'package:flutter/material.dart';
class Test extends StatefulWidget {
final String text;
Test(this.text);
final state = _TestState();
@override
_TestState createState() => state;
}
class _TestState extends State<Test> {
String? changingText;
void updateChangingText(String moreText){
changingText = changingText! + moreText;
}
@override
void initState() {
super.initState();
changingText = widget.text;
}
@override
Widget build(BuildContext context) {
return Text(changingText!);
}
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
var w = Test('test');
w.state.updateChangingText(' text');
return MaterialApp(home: Scaffold(body:
Test('test text')
));
}
}
void main() {
runApp(App());
}
这不起作用,因为在 initState 为其提供初始值之前正在更新 changedText,因为它仅在将文本绘制到屏幕上时运行,并且:
导入'package:flutter/material.dart';
class Test extends StatefulWidget {
final String text;
Test(this.text);
final state = _TestState();
@override
_TestState createState() => state;
}
class _TestState extends State<Test> {
String? changingText;
void updateChangingText(String moreText){
changingText = changingText! + moreText;
}
_TestState(){
changingText = widget.text;
}
@override
Widget build(BuildContext context) {
return Text(changingText!);
}
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
var w = Test('test');
w.state.updateChangingText(' text');
return MaterialApp(home: Scaffold(body:
Test('test text')
));
}
}
void main() {
runApp(App());
}
也不起作用,因为您不能在状态类构造函数中使用 widget.[whatever](出于某种原因)。
那么,在将小部件绘制到屏幕之前,如何在状态类中使用小部件参数?
提前感谢您的帮助
【问题讨论】: