我正在尝试在我的项目中创建辅助常量,这样我就不必一次又一次地键入语法。这是代码。
import 'package:flutter/material.dart';
// Images
Map<String, String> images = {
'APP_LOGO': 'lib/resources/globals/assets/images/app_logo.png'
};
// Colors
Map<String, Color> colors = {
'PRIMARY_FONT_COLOR': const Color(0xFF000000),
'SECONDARY_FONT_COLOR': const Color(0xFF4FAFF5),
};
// Paddings
Map<String, EdgeInsetsGeometry> paddings = {
// ALL
'P_1': const EdgeInsets.all(5.0),
'P_2': const EdgeInsets.all(10.0),
'P_3': const EdgeInsets.all(15.0),
'P_4': const EdgeInsets.all(20.0),
// HORIZONTAL
'PX_1': const EdgeInsets.symmetric(vertical: 0, horizontal: 5.0),
'PX_2': const EdgeInsets.symmetric(vertical: 0, horizontal: 10.0),
'PX_3': const EdgeInsets.symmetric(vertical: 0, horizontal: 15.0),
'PX_4': const EdgeInsets.symmetric(vertical: 0, horizontal: 20.0),
// VERTICAL
'PY_1': const EdgeInsets.symmetric(vertical: 5.0, horizontal: 0),
'PY_2': const EdgeInsets.symmetric(vertical: 10.0, horizontal: 0),
'PY_3': const EdgeInsets.symmetric(vertical: 15.0, horizontal: 0),
'PY_4': const EdgeInsets.symmetric(vertical: 20.0, horizontal: 0),
};
// Text Alignment
Map<String, TextAlign> text_alignment = {
'CENTER': TextAlign.center,
'LEFT': TextAlign.left,
'RIGHT': TextAlign.right,
'JUSTIFY': TextAlign.justify,
};
现在,当我尝试在如下所示的小部件中使用这些常量时,
Image.asset(global_constants.images['APP_LOGO'].toString()),
Text(
local_strings.headings['ABOUT_BENJI'].toString(),
style: local_constants.text_styles['ABOUT_BENJI'],
textAlign: global_constants.text_alignment['CENTER'],
),
它按预期工作,但我不知道 Padding
小部件会发生什么。
使用常量进行填充, padding: global_constants.paddings['PX_5']
。
我收到的错误 Error: The argument type 'EdgeInsetsGeometry?' can't be assigned to the parameter type 'EdgeInsetsGeometry' because 'EdgeInsetsGeometry?' is nullable and 'EdgeInsetsGeometry' isn't.
现在我确实理解了错误,但是,我该如何克服这个错误。我的意思是除了填充小部件之外,所有其他常量都在工作。欢迎任何建议。谢谢
答案 0 :(得分:2)
发生这种情况是因为地图值的 []
运算符 returns a nullable type。这是设计使然,因此如果给定的键不在地图中,它可以返回 null。
要解决此问题,您需要添加 !
null assertion operator 并强制转换为不可为 null 的类型,前提是您确定该变量为非 null。所以在你的情况下,
padding: global_constants.paddings['PX_5']!
但是,老实说,我建议反对您当前的设计模式 - 最好使用常量而不是映射,所以
abstract class Paddings {
static const P_1 = const EdgeInsets.all(5.0);
static const P_2 = const EdgeInsets.all(10.0);
static const P_3 = const EdgeInsets.all(15.0);
static const P_4 = const EdgeInsets.all(20.0);
}
等等。这样,您就可以完全回避可空性问题。