flutter - 不使用 '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),
),
);
}
}
解决方案
如果您使用基于最新 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),
),
);
}
}
推荐阅读
- kubernetes - kubectl - 如何通过命令行将服务规范类型编辑为 LoadBalancer?
- matlab - 类别标签不适合 Matlab GUI
- spring-integration - 带有“订阅共享”选项的“int-jms:消息驱动通道适配器”的 Spring Integration DSL 等效项
- java - 为什么这个程序不播放我的音乐文件?
- java - Java fx 加载后出现意外的镜像效果
- jquery - jsView jQuery UI 小部件自动完成自定义数据和显示
- python - 导致语法错误的简单python方法
- vba - 使用 VBA 将逗号小数转换为句点小数
- lua - SHA512 纯 Lua 5.1 适配
- r - 如何让 which() 抛出无序值?