Function 的 Flutter 默认值
Flutter default value for a Function
我目前正在学习有关 Flutter 的课程。他们为您提供了一个旧的存根项目(可为空)。
当我尝试迁移到 Flutter 2.12.0 或更高版本时 - 空安全启动。
我对它的工作原理有基本的了解 - 但我在 Google 或 Whosebug 上找不到任何地方。
我有一个自定义卡片小部件。它需要一个颜色参数。我还需要它能够接收一个 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,
),
),
);
}
}
我认为这就是您所需要的:https://dart.dev/null-safety/understanding-null-safety#late-variables。
您可以将变量定义为
late final Widget cardChild;
late final Function onPress;
然后在使用它们之前在您的构造函数(或状态对象的 initState)中初始化它们。
您可以按如下方式将它们设为可为空的字段
ReusableCard({required this.cardColor, this.cardChild, this.onPress});
final Color cardColor;
final Widget? cardChild;
final VoidCallback? onPress;
对于可空函数,使用?
class FooWidget extends StatelessWidget {
final Function? onPressed; // <-- Nullable, use '?'
FooWidget({
this.onPressed,
});
// ...
}
对于不可为 null 的函数,使用 required
class FooWidget extends StatelessWidget {
final Function onPressed; // <-- Non-nullable
FooWidget({
required this.onPressed, // <-- Use 'required'
});
// ...
}
只是改变
final Function onPress;
至
final Function() onPress;
我目前正在学习有关 Flutter 的课程。他们为您提供了一个旧的存根项目(可为空)。 当我尝试迁移到 Flutter 2.12.0 或更高版本时 - 空安全启动。 我对它的工作原理有基本的了解 - 但我在 Google 或 Whosebug 上找不到任何地方。
我有一个自定义卡片小部件。它需要一个颜色参数。我还需要它能够接收一个 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,
),
),
);
}
}
我认为这就是您所需要的:https://dart.dev/null-safety/understanding-null-safety#late-variables。
您可以将变量定义为
late final Widget cardChild;
late final Function onPress;
然后在使用它们之前在您的构造函数(或状态对象的 initState)中初始化它们。
您可以按如下方式将它们设为可为空的字段
ReusableCard({required this.cardColor, this.cardChild, this.onPress});
final Color cardColor;
final Widget? cardChild;
final VoidCallback? onPress;
对于可空函数,使用
?
class FooWidget extends StatelessWidget { final Function? onPressed; // <-- Nullable, use '?' FooWidget({ this.onPressed, }); // ... }
对于不可为 null 的函数,使用
required
class FooWidget extends StatelessWidget { final Function onPressed; // <-- Non-nullable FooWidget({ required this.onPressed, // <-- Use 'required' }); // ... }
只是改变
final Function onPress;
至
final Function() onPress;