考虑一下这段代码:

class Parent {
  final List<int> bytes;
  Parent(this.bytes);
}

class Child extends Parent {
  final String name;
  
  Child(String s) : name = s.trim(), super(s.trim().codeUnits);
}

基本上,Child接受String作为构造函数参数.我想要做的是修剪它,将其存储在name变量中,并将其codeUnits传递给super构造函数.我面临的问题是,似乎无法避免两次拨打trim.我很想用super里面的name,但Dart不让我这么做.有没有什么办法让trim只打一次电话?

推荐答案

一种解决方案是创建第二个构造函数,在使用真正的构造函数(现在标记为私有)之前准备数据:

class Child extends Parent {
  final String name;

  Child._(this.name) : super(name.codeUnits);
  Child(String s) : this._(s.trim());
}

If you have a more complicated case, you could also consider using a factory constructor:
https://dart.dev/language/constructors#factory-constructors

Dart相关问答推荐

为什么 Dart 程序在使用词法作用域时会根据声明变量的位置而表现不同?

Dart 中 ThemeData 类的 copyWith() 方法

Dart,后面带感叹号的标识符

从 Dart 中的工厂构造函数返回 null 是否可以接受?

Flutter 中带有导航栏的永久视图

如何使用 Dart 分析器从源代码生成 AST 并使用 AST?

InheritedWidget - 在 navigator.push 之后在 null 上调用 getter

将 Flutter 前端与 Android 和 iOS 的 .NET Core 后端相结合

LinearProgressIndicator Flutter使用

如何在Flutter中正确显示Snackbar?

是否有必要为Flatter安装Android Studio,或者可以用什么替代Android Studio?

如何实现从左侧滑动的侧边菜单?

Opa vs Dart vs Haxe vs CoffeeScript

如何判断switch/case中对象的类型?

如何在抽象类中声明工厂构造函数?

~ 在 Dart 中是什么意思?

方法级联如何在 dart 中准确工作?

Dart 中的 urlencoding

dart列表最小值/最大值

如何在 Dart 中生成唯一 id