为什么我会收到此 NoSuchMethodError?

Why am I getting this NoSuchMethodError?

我有这个代码

String encrypt(String x) {
    String out;
    var _x = x.codeUnits;
    List dict;
    /* <dict_assignment> */
    dict[0] = 'a';
    dict[1] = 'b';
    dict[2] = 'c';
    dict[3] = 'd';
    dict[4] = 'e';
    dict[5] = 'f';
    dict[6] = 'g';
    dict[7] = 'h';
    dict[8] = 'i';
    dict[9] = 'j';
    /* </dict_assignment> */
    _x.toList().forEach((i) {
      var _i = i.toString();
      _i.split("").forEach((k) {
        var _k = int.parse(k);
        print(_k);
        print(dict[_k]);
        out += dict[_k];
      });
    });
    return out;
  }

(是的,我正在写 HTML 标签作为 Dart 中的评论...起诉我) (不知道为什么我的缩进搞砸了)

出于某种原因,当我将同一个函数与这样的随机字符串一起使用时

var x = encrypt("hmm interesting");

我一直收到这个

Unhandled exception:
NoSuchMethodError: The method '[]=' was called on null.
Receiver: null
Tried calling: []=(0, "a")
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)

请帮帮我,我真的很困惑为什么会这样

您尚未初始化 dict 变量,因此它包含 null.

如果您将 List dict; 更改为 List dict = [];,那么 将开始工作。 你也没有初始化 out.

代码的其余部分过于复杂,也可以优化。这里有一个建议:

String encrypt(String x) {
  var out = StringBuffer();
  const dict = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
  for (var i in x.codeUnits) { // x.codeUnits is a list. Use for-in to iterate it.
    for (var k in i.toString().codeUnits) {
      var _k = k ^ 0x30; // Best way to convert code unit for 0-9 into integer 0-9.
      // print(_k);
      // print(dict[_k]);
      out.write(dict[_k]); // Use a StringBuffer instead of repeated concatenation.
    }
  }
  return out.toString();
}

它似乎不是可解密的加密。字符串 "77" 和字符串 "ᖳ"(又名 "\u15b3")都加密为“ffff”。

或者,如果你想“代码高尔夫”而不是可读性或接近原始,它也可以是一行:

String encrypt(String x) => [
      for (var i in x.codeUnits)
        for (var k in "$i".codeUnits) "abcdefghij"[k ^ 0x30]
    ].join("");