flutter 我可以在从StateFull调用的函数中使用setState()吗?

sulc1iza  于 2023-08-07  发布在  Flutter
关注(0)|答案(1)|浏览(145)

我有这个代码:

class buildApp extends StatefulWidget {
  const buildApp({super.key});
  @override
  State<buildApp> createState() => _buildAppState();
}
class _buildAppState extends State<buildApp> {
  @override
  Widget build(BuildContext context) {
    return  LayoutBuilder(builder: (context,constraints){
       if(constraints.maxWidth <= 768){
         return buildPortrait(State);
       }
       return const Text('');
    });
  }
}

buildPortrait(){
   ...
}

字符串
问题是,在buildPortrait()中,我需要调用setState,因为我有一个DropDownButton和一个onChanged事件,但那里不存在steState。有可能做到吗?也许获取状态并作为变量传递?
当然,我是开放的新闻方法...我正试图创建一个肖像和lasdscape响应应用程序。

  • 谢谢-谢谢
    我可以在buildApp类中创建所有两个函数,buildPortrait()和buildLandScape(),但代码会变得一团糟。
vktxenjb

vktxenjb1#

正如我在评论中提到的

  1. setState仅在State类中可用。在您的示例中,您将其命名为_buildAppState
class _buildAppState extends State<buildApp> {
  @override
  Widget build(BuildContext context) {
  // widget code will be here 
  }

//put your function inside , so you can free to use it
 buildPortrait(){
   ...
 }

} // close bracket for _buildAppState class

字符串
1.在其他情况下,一些开发人员希望将其方法分离到另一个文件中。这种代码风格有助于开发人员避免在文件中出现过多行代码。
如果要分离方法,可以使用以下解决方法:
你的方法在另一个文件中,

  • helper.dart
buildPortrait({VoidCallback? sst}){

   // your code here
   
   // every time you want to call setState, just invoke the sst
   sst?.call(); // this will execute setState in the parent class
   ...
}

  • buildApp.dart
class buildApp extends StatefulWidget {
  const buildApp({super.key});
  @override
  State<buildApp> createState() => _buildAppState();
}
class _buildAppState extends State<buildApp> {
  @override
  Widget build(BuildContext context) {
  return Column(
      children:[
         ElevatedButton(
            onPressed: () {
              /// now you can use it and pass the params setState
              buildPortrait(sst: () => setState(() {}));
            },
            child: Text("nasdasda")
          )
}

相关问题