0

次のように、マップをエンコードするために多くの場所で見た例があります。

#import('dart:uri');
String encodeMap(Map data) {
    return Strings.join(data.getKeys().map((k) {
        return "${encodeUriComponent(k)}=${encodeUriComponent(data[k])}";
    }), "&");
}

上記の例では、最新のDartエディター(バージョン0.2.9_r 16323)のように見えるものを実行していますが、Dart M2の場合は、data.getKeys()変更されたものに変更されたdata.keys()と思います。

ただし、エディターで実行するとエラーが発生します。

例外:NoSuchMethodError:メソッドが見つかりません:'call' "

2つの質問があります:

  • 上記のコードは、示された変更(Map.keys())を使用してもM2で引き続き機能するかどうか疑問に思っていますか?
  • 上記のコードが次のように何か違うことをするのではないかと思います。JSON.stringify(data);

他のポインタは大歓迎です。

TIA。

4

1 に答える 1

0

行うべき2つの変更:

  • import構文が変更されました。
  • getKeys()メソッドは。と呼ばれるゲッターになりましたkeys

動作中のバージョン:

import 'dart:uri';

String encodeMap(Map data) {
    return Strings.join(data.keys.map((k) {
        return "${encodeUriComponent(k)}=${encodeUriComponent(data[k])}";
    }), "&");
}

これStringによって生成されるものは、次のスニペットでわかるように、encodeMapによって生成されるものとはかなり異なります。JSON.stringify

main() {
  final map = {"a":"b", "c":"d"};
  assert(encodeMap(map) == "a=b&c=d");
  assert(JSON.stringify(map) == '{"a":"b","c":"d"}');
}
于 2013-01-04T20:22:17.203 に答える