颤振:EdgeInsetsGeometry?不能分配给 EdgeInsetsGeometry

时间:2021-07-30 09:32:35

标签: flutter dart

我正在尝试在我的项目中创建辅助常量,这样我就不必一次又一次地键入语法。这是代码。

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.

现在我确实理解了错误,但是,我该如何克服这个错误。我的意思是除了填充小部件之外,所有其他常量都在工作。欢迎任何建议。谢谢

1 个答案:

答案 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);
}

等等。这样,您就可以完全回避可空性问题。