首页 > 解决方案 > 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));
  }

我究竟做错了什么?我应该在其他地方声明这个变量/条件吗?还是我应该采取更好的方法?

标签: flutterdartmethodsstaticparameter-passing

解决方案


TheState和 theStatefulWidget是 2 个不同的类,但您可以通过使用StatefulWidget从 a中访问对应的类:StateState.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);
  }

  //...
}

推荐阅读