函数的颤振默认值

时间:2021-05-17 09:34:36

标签: flutter dart dart-null-safety

我目前正在学习有关 Flutter 的课程。他们为您提供了一个旧的存根项目(可为空)。 当我尝试迁移到 Flutter 2.12.0 或更高版本时 - 空安全启动。 我对它的工作原理有基本的了解 - 但我在 Google 或 StackOverFlow 上找不到任何地方。

我有一个自定义卡片小部件。它需要一个颜色参数。此外,我需要它能够接收 Widget 子参数以及 onPress 函数,但我不想让它们成为必需。 请帮忙。如何为小部件和函数创建默认值?

class ReusableCard extends StatelessWidget {
  ReusableCard({@required this.cardColor, this.cardChild, this.onPress});
  final Color cardColor;
  final Widget cardChild;
  final Function onPress;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onPress,
      child: Container(
        child: cardChild,
        margin: EdgeInsets.all(10.0),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(10.0),
          color: cardColor,
        ),
      ),
    );
  }
}

3 个答案:

答案 0 :(得分:0)

我认为这就是您所需要的:https://dart.dev/null-safety/understanding-null-safety#late-variables

您可以将变量定义为

late final Widget cardChild; 
late final Function onPress;

然后在使用它们之前在您的构造函数(或 initState 用于 State 对象)中初始化它们。

答案 1 :(得分:0)

您可以按如下方式将它们设为可空字段

  ReusableCard({required this.cardColor, this.cardChild, this.onPress});
  final Color cardColor;
  final Widget? cardChild;
  final VoidCallback? onPress;

答案 2 :(得分:0)

  • 对于可为空的函数,使用 ?

    class FooWidget extends StatelessWidget {
      final Function? onPressed; // <-- Nullable, use '?'
    
      FooWidget({
        this.onPressed,
      });
    
      // ... 
    }
    
  • 对于不可为空的函数,使用 required

    class FooWidget extends StatelessWidget {
      final Function onPressed; // <-- Non-nullable
    
      FooWidget({
        required this.onPressed, // <-- Use 'required'
      });
    
      // ...
    }