【问题标题】:How to access Stateful widget variable inside State class outside the build method?如何在构建方法之外访问 State 类中的 Stateful 小部件变量?
【发布时间】:2019-07-25 01:19:39
【问题描述】:

我正在尝试访问在 _UpdateNotesState 的代码中声明的“updateNotesModel”变量。我发现你可以使用'widget'关键字来完成它,如下面的脚手架所示。但这里的问题是我试图访问构建方法之外的变量,以便为 TextEditingController 提供默认值。我怎样才能做到这一点?

class UpdateNotes extends StatefulWidget {

  final NotesModel updateNotesModel;
  UpdateNotes({Key key, this.updateNotesModel}): super(key: key);

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

class _UpdateNotesState extends State<UpdateNotes> {

  TextEditingController _titleController = 
new TextEditingController(text: widget.updateNotesModel.someValue); //getting an error
}

@override
  Widget build(BuildContext context) {
    return Scaffold(
    var a = widget.updateNotesModel.someValue
     .
     .
     .
     )
    }
}

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    你可以在initState:

    class _UpdateNotesState extends State<UpdateNotes> {
      TextEditingController _titleController = new TextEditingController(); 
    
      @override
      void initState() {
        _titleController.text= widget.updateNotesModel.someValue;
        super.initState();
      }
    }
    

    【讨论】:

    • 您好,感谢您的解决方案!还有一件事,有没有一种方法可以改变 updateNotesModel 成员的值,即使颤振迫使我将其初始化为最终值。像 widget.updateNotesModel.someValue = newValue?
    • 没关系。此变量在父小部件中不应为 const。您可以在父小部件中setState,然后颤动重建小部件树并重新初始化您的小部件。
    • 或者如果你不想在这个小部件中改变它,你应该让updateNotesModel成为状态的一部分,而不是小部件。
    • 再次感谢,我会试一试,希望我能弄明白!
    【解决方案2】:

    不幸的是,无法做到这一点,因为初始化时无法访问小部件关键字

    【讨论】:

    • 两年前接受的答案表明可以做到。这个答案错了​​吗?
    猜你喜欢
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多