【问题标题】:How to pass parameters through a Stateful widget如何通过有状态小部件传递参数
【发布时间】:2019-12-28 03:53:42
【问题描述】:

当调用另一个类时,我想用一个参数来启动那个类,就像小部件经常被初始化一样。

当使用StatefulWidget 执行此操作时,我会创建一个自定义实例化器,就像使用 C# 或其他我比 Dart 更了解的语言一样,并将参数传递给类的属性。

Stateful 类给了我一条蓝色波浪线,并说我应该在“@immutable 类”中启动属性,它可以工作,但我讨厌蓝色波浪线。

有没有更好的方法将参数传递给有状态的类?


class CreateTest extends StatefulWidget {
  DemandRecord _demandRecord;
  BuildContext _buildContext;
  @override
  State<StatefulWidget> createState() {
    return CreateTestState(_buildContext,_demandRecord);
  }

  CreateTest() 
  {

  }

  CreateTest.start(BuildContext context, DemandRecord demandRecord) {
    _buildContext = context;
    _demandRecord = demandRecord;
  }  
}

我只是想把它转发出去......

这是错误 ==>

这个类(或这个类继承自的一个类)被标记为“@immutable”,但它的一个或多个实例字段不是最终的:

杰米

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    对于那些将来阅读本文的人,几个月后我发现了如何做我真正想做的事,但不知道如何做。

    在控制器的实现中有一个名为# widget # 的参数,可用于返回到创建State 控制器的Widget。

    import 'package:flutter/material.dart';
    
    class CreateTest extends StatefulWidget {
      final DemandRecord demandRecord;
      final BuildContext buildContext;
    
      CreateTest({Key key, this.demandRecord, this.buildContext}) : super(key: key);
    
      @override
      _CreateTestState createState() => _CreateTestState();
    }
    
    class _CreateTestState extends State<CreateTest> {
    
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
    

    // 我想回到课堂并获取需求记录通知 // “小部件。”

      Colors localColor = widget.demandRecord.color; 
      if (localColor == Colors.blue) 
         // act on local Color here and notice widget. gave access to
         // parameters passed into StatefulWidget 
    
        return null;
      }
    
    }
    

    【讨论】:

      【解决方案2】:

      这是实现您要执行的操作的正确方法,使用类似于documentation 中提供的结构:

      import 'package:flutter/material.dart';
      
      class CreateTest extends StatefulWidget {
        final DemandRecord demandRecord;
        final BuildContext buildContext;
      
        CreateTest({Key key, this.demandRecord, this.buildContext}) : super(key: key);
      
        @override
        _CreateTestState createState() => _CreateTestState();
      }
      
      class _CreateTestState extends State<CreateTest> {
      
        @override
        Widget build(BuildContext context) {
          // TODO: implement build
          return null;
        }
      
      }
      

      那么当你想调用它时:

      CreateTest(demandRecord: record, buildContext: context);
      

      【讨论】:

      • 谢谢,非常有帮助。谢谢
      • 另一个快速问题,我想将变量传递给 _CreateTestState 函数,我需要传递它的 Key 的目的是什么?
      • Mazin,谢谢,我知道密钥的用途,我试图确定的是为什么他特别选择上面创建密钥并传递它。
      猜你喜欢
      • 1970-01-01
      • 2021-07-23
      • 2020-05-06
      • 2021-08-29
      • 2020-12-01
      • 2019-12-29
      • 1970-01-01
      • 2021-01-27
      • 2021-06-08
      相关资源
      最近更新 更多