【问题标题】:Dart: const class or const var?Dart:const 类还是 const var?
【发布时间】:2021-05-24 20:25:27
【问题描述】:

新手问题。 就性能而言,下面的 class(构建 TextField 的小部件)之间存在很大差异, 还是一个不重建任何东西的 const ?我在 Flutter 中听说一切都是小部件,例如在构建 func vs class 时,总是构建一个类来替换您在代码上构建的任何内容。我想这可能是一样的。

class RoundedBox extends StatelessWidget {
  const RoundedBox({
    this.text,
    this.onChanged,
  });
  final String text;
  final Function onChanged;

  @override
  Widget build(BuildContext context) {
    return TextField(
      onChanged: onChanged,
      decoration: InputDecoration(
        hintText: text,
        hintStyle: TextStyle(
          color: Colors.grey,
        ),
        contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0),
        border: OutlineInputBorder(
          borderRadius: BorderRadius.all(Radius.circular(32.0)),
        ),
        enabledBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Colors.lightBlueAccent, width: 1.0),
          borderRadius: BorderRadius.all(Radius.circular(32.0)),
        ),
        focusedBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Colors.lightBlueAccent, width: 2.0),
          borderRadius: BorderRadius.all(Radius.circular(32.0)),
        ),
      ),
    );
  }
}

或者只是一个简单的 const var?:

const kTextFieldDecoration = InputDecoration(
  hintText: 'Enter a value',
  hintStyle: TextStyle(
    color: Colors.grey,
  ),
  contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0),
  border: OutlineInputBorder(
    borderRadius: BorderRadius.all(Radius.circular(32.0)),
  ),
  enabledBorder: OutlineInputBorder(
    borderSide: BorderSide(color: Colors.lightBlueAccent, width: 1.0),
    borderRadius: BorderRadius.all(Radius.circular(32.0)),
  ),
  focusedBorder: OutlineInputBorder(
    borderSide: BorderSide(color: Colors.lightBlueAccent, width: 2.0),
    borderRadius: BorderRadius.all(Radius.circular(32.0)),
  ),
);

【问题讨论】:

    标签: flutter class dart var


    【解决方案1】:

    在这种情况下,如果您重用定义为 const 的InputDecoration,您将获得更好的性能。

    但这是等价的(注意 InputDecoration 之前的 const)。将const 用于不会改变的Widgets 是一种很好的做法。

    
      @override
      Widget build(BuildContext context) {
        return TextField(
          onChanged: onChanged,
          decoration: const InputDecoration(
            hintText: text,
            hintStyle: TextStyle(
              color: Colors.grey,
            ),
            contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0),
            border: OutlineInputBorder(
              borderRadius: BorderRadius.all(Radius.circular(32.0)),
            ),
            enabledBorder: OutlineInputBorder(
              borderSide: BorderSide(color: Colors.lightBlueAccent, width: 1.0),
              borderRadius: BorderRadius.all(Radius.circular(32.0)),
            ),
            focusedBorder: OutlineInputBorder(
              borderSide: BorderSide(color: Colors.lightBlueAccent, width: 2.0),
              borderRadius: BorderRadius.all(Radius.circular(32.0)),
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 谢谢@YoBo。我想像往常一样,一切都取决于我们需要知道的最佳方法。
    猜你喜欢
    • 2020-05-31
    • 2020-04-13
    • 2020-09-27
    • 2021-10-23
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    相关资源
    最近更新 更多