我正在尝试使用 flutter 制作 Bmi 计算器,但出现了很多错误

问题描述 投票:0回答:4

import 'package:flutter/material.dart';

class ReusableCard extends StatelessWidget {
  ReusableCard({@required this.colour, this.cardChild, this.onPress}); // i am getting errors here
  final Color colour ;
  final Widget cardChild;
  final Function onPress;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onPress(),
      child: Container(
//if box decoration is there in the code then the color property should go in the box decoration property
        decoration: BoxDecoration(
            color:colour,
            borderRadius: BorderRadius.circular(15.0)
        ),
        margin: EdgeInsets.all(15.0),
      ),
    );
  }
}

我收到错误:参数“onPress”、“cardChild”、“colour”因其类型而不能具有“null”值,但隐式默认值为“null”。在飞镖分析中

flutter dart
4个回答
0
投票

您面临的错误是由空安全引起的,您可能需要更改您的类型:

final Color colour ;
final Widget cardChild;
final Function onPress;

//to

final Color? colour ;
final Widget? cardChild;
final Function? onPress;

但我建议你将它们全部放在带有装饰器的构造函数中

@required

您可以在官方文档中了解有关空安全语法的更多信息:
https://flutter.dev/docs/null-safety


0
投票

我遇到了同样的错误,即使使用

@required
装饰器也不足以解决问题, 对我来说解决这个问题的是,我必须禁用该项目的 null-safety ,方法是从 ">=2.12.0 =2.11.0 pubspec.yaml<3.0.0" to "> 文件中<3.0.0" through modifying the 降级 flutter 版本。具体在依赖项 -> sdk。

请记住,通过降级项目的 flutter 版本将禁用 null-safety 的整个使用,包括“?”检查操作员

以下是 Flutter 文档中的一篇很好的文章,可以帮助您更好地理解 Dart 语言中的空安全功能: https://dart.dev/null-safety#enable-null-safety

这也是一篇很好的综合性文章 https://petercoding.com/flutter/2021/03/04/using-null-safety-in-dart/


0
投票

我在 onPress 的构造函数中添加了“必需”。 但是,我无法将其直接分配给 GestureDetector 小部件的 onTap: 部分。所以我从一个与 onTap 的预期方法签名匹配的方法中调用它。 最后,这是对我有用的(不优雅的)解决方案:

class ReusableCard extends StatelessWidget {

ReusableCard({required this.colour, this.cardChild, required this.onPress});

final Color colour;
final Widget? cardChild;
final Function onPress;

void onPressAction() {
    onPress();
}

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

0
投票

Just apply null safety!!

class ReusableCard extends StatelessWidget {
  final Color? colour;
  final Widget? cardChild;
  final Function? onPress;
  ReusableCard({super.key, required this.colour, required this.cardChild, required this.onPress}); // Applied required
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () => onPress!(), //change Here
      child: Container(
        decoration: BoxDecoration(color: colour, borderRadius: BorderRadius.circular(15.0)),
        margin: EdgeInsets.all(15.0),
      ),
    );
  }
}

希望这能解决您的问题。

Happy Coding!!

© www.soinside.com 2019 - 2024. All rights reserved.