flutter - Flutter/Dart:Widget 中的文本会根据哪个 Screen 调用而改变?
问题描述
我有一个记录音频的有状态小部件。它用于两个不同的屏幕。我希望其按钮上的文本基于调用它的屏幕。IE:如果从一个屏幕调用,则文本为“Record”,但如果从另一个屏幕调用,则文本为“Try it”。
所以我用调用它的屏幕名称向它传递了一个参数。然后我尝试使用带条件的变量。但该参数不可用,并带有红色下划线。Android Studio 告诉我“只能在初始化程序中访问静态成员”。
那么如何访问“whichscreen”参数以便可以在变量/条件中使用它?
这是代码:
class SpeakRecorder extends StatefulWidget {
final String whichscreen;
SpeakRecorder({
this.whichscreen
})
String screenchoice = (whichscreen == "recordscreen") ? "Record" : "Try it";
...
这是需要记录按钮文本选择的小部件;
Widget _buildText(RecordingStatus status) {
var text = "";
switch (_currentStatus) {
case RecordingStatus.Initialized:
{
text = screenchoice;
break;
}
case RecordingStatus.Recording:
{
text = 'Pause';
break;
}
case RecordingStatus.Paused:
{
text = 'Resume';
break;
}
default:
break;
}
return Text(text, style: TextStyle(color: Colors.white));
}
我究竟做错了什么?我应该在其他地方声明这个变量/条件吗?还是我应该采取更好的方法?
解决方案
TheState
和 theStatefulWidget
是 2 个不同的类,但您可以通过使用StatefulWidget
从 a中访问对应的类:State
State.widget
class ExampleWidget extends StatefulWidget{
final String prop;
// ...
}
class ExampleState extends State<ExampleWidget>{
// here you can get the prop of the corresponding widget with widget.prop
Widget build(BuildContext context){
return Text(widget.prop);
}
//...
}
推荐阅读
- node.js - 如何通过在猫鼬中分组返回两个匹配条件的计数值?
- scala - spark scala 如何计算自 1970-01-01 以来的天数
- c# - 从计划任务运行的另一个 DotNet EXE 运行 DotNet exe
- html - 自定义旋转框箭头
- python-3.6 - Python 脚本运行但不工作并且没有抛出错误
- python - 如何在 SQLite 中使用 peewee 更改字段的数据类型
- sql - 在 postgres Sql 中按级别和 regexp_substr 连接
- amazon-web-services - 我可以从多个 SQS 触发相同的 AWS lambda 吗?
- javascript - 循环将在 Google Sheets 脚本中查找和删除特定行
- javascript - 测试 Observable 回调以更改对象状态