【问题标题】:Evaluation of this constant expression throws an exception. error in dart对该常量表达式的求值会引发异常。飞镖错误
【发布时间】:2021-08-17 14:48:19
【问题描述】:

这是我的代码:

const InputDecoration kTextFieldDecoration = InputDecoration(
    filled: true,
    fillColor: Colors.white,
    icon: Icon(Icons.location_city, color: Colors.white,),
    hintText: "Enter city name",
    hintStyle: TextStyle(
        color: Colors.grey
    ),
    border: OutlineInputBorder(
      borderSide: BorderSide.none,
      borderRadius: BorderRadius.circular(10)
    )
);

每当我添加 const 时都会收到错误消息。

在这个question 中,我们必须给出编译时间常数才能将其声明为const,但在我的代码中我给出了编译时间常数。

我在某处看到如果构造函数是const,那么我在创建对象时不能使用const,这是什么原因?

该错误仅针对 OutlineInputBorder,因为它具有 const 构造函数。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    如果您检查documentation here,您会发现BorderRadius.circular(radius) 内部与BorderRadius.all(Radius.circular(radius)) 相同。

    尝试替换代码中的这一行:

    borderRadius: BorderRadius.circular(10)
    

    用这个:

    borderRadius: BorderRadius.all(Radius.circular(10))
    

    现在它将与const 一起使用。解释是BorderRadius.all(Radius.circular(10)) 也是一个常量,因此在另一个常量声明中有效。但是由于BorderRadius.circular 构造函数中的this 关键字,您使用的速记版本只能在运行时进行评估。

    【讨论】:

    • 重要的一点是BorderRadius.circular 不是const 构造函数,因此不能在const 上下文中使用。 (不幸的是,它不能是 const 构造函数,因为它不能无条件地调用 Radius.circular 作为 const 构造函数。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2012-01-07
    • 1970-01-01
    相关资源
    最近更新 更多