簡體   English   中英

不使用“required”時,參數的值不能為 null

[英]The parameter can't have a value of null when 'required' is not used

我沒有使用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),
      ),
    );
  }
}

如果您使用的是基於最新 SDK 的空安全,那么您必須使用? 問題運算符,那么您不需要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),
      ),
    );
  }
}

發生此錯誤是因為您將cardChild聲明cardChild不可為空,但也聲明為沒有default值的optional參數。 這意味着cardChild可以為 null,這就是發生錯誤的原因。 要解決此問題,請聲明您的cardChild可為空,但如果cardChild為 null,請確保您處理這種情況

class ReusableCode extends StatelessWidget {
  ReusableCode({required this.colour, this.cardChild});
  final Color colour;
  final Widget? cardChild;
  @override
  ...
  }
}

或設置required關鍵字

class ReusableCode extends StatelessWidget {
  ReusableCode({required this.colour, required this.cardChild});
  final Color colour;
  final Widget? cardChild;
  ...
  }
}

或為cardChild設置default值。

class ReusableCode extends StatelessWidget {
  ReusableCode({required this.colour, this.cardChild = Container()});
  final Color colour;
  final Widget? cardChild;
  ...
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM