Dart 字符串插值读取文件

Dart string interpolation reading a file

我知道您可以使用字符串插值来引用字符串文字中的对象,但是,对于从读取文本文件给出的字符串,这可能吗?

我是说。类似于:

Function MyTemplate() {
    return (Context context) {
        return readMyFile(); // String: "My name is ${context.name}"
    }
}

我已阅读 Can I apply Dart's string interpolation dynamically?

但这似乎只适用于硬编码字符串。

字符串插值仅适用于硬编码字符串。您需要构建自己的解决方案或使用现有模板包之一。

使用核心库中的splitMapJoin 方法的简单解决方案:

String inter(String format, Map<String, dynamic> sub ,{String placeholder = ""}){
    return format.splitMapJoin(RegExp(r'{.*?}'),
    onMatch:    (m) => sub[m.group(0).substring(1, m.group(0).length - 1)].toString() ?? placeholder,
    onNonMatch: (n) => n);
}

还有一个 package 来处理这个问题。

但是,这些解决方案对我的应用程序来说并不令人满意,它还需要从用户提供的文件中插入一个字符串。由于在这种情况下可以做出较少的假设,因此希望可以从输入字符串中检测到错误。因此,我开发了 another package 来实现这一点,并略微提高了性能。该软件包仍处于初级阶段,但所有功能都经过测试。如果您有任何建议,请反馈。