首页 > 解决方案 > 不使用 'required' 时,参数不能有 null 值

问题描述

我没有使用required关键字,但它表明参数不能具有 null 值。我想我将值分配为 Widget 类型
的列错误:

The parameter 'cardChild' can't have a value of 'null' because of its type, but the implicit default value is 'null'. (missing_default_value_for_parameter at [bmi_calculator] lib\state_page.dart:97)**

代码在下面

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

const bottomContainerHeight = 80.0;
const activeCodeColor = Color(0xFF272B4D);
const bottomContainerColour = Colors.pink;

class InputPage extends StatefulWidget {
  @override
  _InputPageState createState() => _InputPageState();
}

class _InputPageState extends State<InputPage> {
  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    return Scaffold(
      backgroundColor: Color(0xFF0C1135),
      appBar: AppBar(
        backgroundColor: Color(0xFF111639),
        title: Center(
          child: Text('BMI CAlCULATOR'),
        ),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: Row(
              children: <Widget>[
                Expanded(
                  child: ReusableCode(
                    colour: activeCodeColor,
                    cardChild: Column(
                      children: <Widget>[
                        Icon(
                          FontAwesomeIcons.mars,
                          size: 80,
                        ),
                        SizedBox(
                          height: 15.0,
                        ),
                        Text(
                          'MALE',
                          style: TextStyle(
                            color: Color(0xFF8D8E98),
                          ),
                        ),
                      ],
                    ),
                  ),
                ),
                Expanded(
                  child: ReusableCode(
                    colour: activeCodeColor,
                  ),
                ),
              ],
            ),
          ),
          Expanded(
            child: ReusableCode(
              colour: activeCodeColor,
            ),
          ),
          Expanded(
            child: Row(
              children: <Widget>[
                Expanded(
                  child: ReusableCode(
                    colour: activeCodeColor,
                  ),
                ),
                Expanded(
                  child: ReusableCode(
                    colour: activeCodeColor,
                  ),
                ),
              ],
            ),
          ),
          Container(
            width: double.infinity,
            height: bottomContainerHeight,
            margin: EdgeInsets.only(top: 10.0),
            decoration: BoxDecoration(
              color: bottomContainerColour,
            ),
          ),
        ],
      ),
    );
  }
}

class ReusableCode extends StatelessWidget {
  ReusableCode({required this.colour, this.cardChild});
  final Color colour;
  final Widget cardChild;
  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.all(10.0),
      decoration: BoxDecoration(
        color: colour,
        borderRadius: BorderRadius.circular(10.0),
      ),
    );
  }
}

标签: flutter

解决方案


如果您使用基于最新 SDK 的null-safety? ,那么您必须使用问题运算符注释这些变量,然后您不需要required关键字。

您可以执行以下操作:

class ReusableCode extends StatelessWidget {
  ReusableCode({this.colour, this.cardChild});
  final Color? colour;
  final Widget? cardChild;
  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.all(10.0),
      decoration: BoxDecoration(
        color: colour,
        borderRadius: BorderRadius.circular(10.0),
      ),
    );
  }
}

推荐阅读