参数类型“图标?”不能分配给参数类型 'Widget'

时间:2021-07-29 06:31:27

标签: flutter flutter-layout

我正在制作一个可重复使用的小部件。首先在函数中完成,然后将其转换为无状态 Widget。它在函数中工作正常,但不知何故在无状态小部件中发出错误。我的代码:

import 'package:flutter/material.dart';

class MyButton extends StatelessWidget {
  final double width;
  final Icon? icon;
  final String text;
  final double radius;
  final VoidCallback onPressed;

  const MyButton(
      {Key? key,
      required this.width,
      this.icon,
      this.text = "",
      this.radius = 0,
      required this.onPressed}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    if (icon != null) {
      return Container(
        width: width,
        child: ElevatedButton.icon(
          icon: icon,
          label: Text(text),
          style: ButtonStyle(
              shape: MaterialStateProperty.all(RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(radius),
          ))),
          onPressed: onPressed,
        ),
      );
    } else {
      return Container(
        width: width,
        child: ElevatedButton(
            child: Text(text),
            style: ButtonStyle(
                shape: MaterialStateProperty.all(RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(radius),
            ))),
            onPressed: onPressed),
      );
    }
  }
}

错误在

if (icon != null) {
      return Container(
        width: width,
        child: ElevatedButton.icon(
          icon: icon,
<块引用>

参数类型“图标?”不能分配给参数类型“小部件”。打开文档

我已经指定了它不可为空的部分,所以我在这里不知道。当它被声明为一个函数时,它工作得很好。

2 个答案:

答案 0 :(得分:1)

你介意试试这个吗

  icon: icon!,

!Icon?改成Icon,应该可以修复

答案 1 :(得分:-1)

Dart 编译器不能很好地检查最终属性的空值,因此您只需在编写精美的代码段中添加一行:

@echo off
for /f %%a in ('powershell -Command "Get-Date -format yyyy.MM.dd__HH.mm"') do set datetime=%%a

del /s /q  "D:\botdeploy\*"
cd /D D:\Source & git checkout PROD & git pull & git tag PROD_deploy_%datetime% & git push --tags
cd /D "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Msbuild" D:\Source\CRM.csproj  /t:Restore,Rebuild /p:outdir="D:\botdeploy\\" /p:Configuration=Release & del  /q "D:\botdeploy\_PublishedWebsites\CRM\Web.config" & "C:\Program Files\7-Zip\7z" a -t7z C:\Users\Nam\Desktop\deploy_PROD_%datetime%.7z D:\botdeploy\_PublishedWebsites\CRM\*
pause