Dart の環境フラグまたはターゲット プラットフォームに基づいてライブラリ/コードを条件付きでインポートする方法はありますか? dart:io
ターゲットプラットフォームに基づいて、の ZLibDecoder / ZLibEncoder クラスと zlib.js を切り替えようとしています。
統一されたインターフェイスを作成する方法を説明する記事がありますが、重複コードを作成しない手法と、その重複コードをテストするための冗長なテストを視覚化できません。game_loop
はこの手法を採用していますが、何も共有していないように見える個別のクラス (GameLoopHtml と GameLoopIsolate) を使用しています。
私のコードは次のようになります。
class Parser {
Layer parse(String data) {
List<int> rawBytes = /* ... */;
/* stuff you don't care about */
return new Layer(_inflateBytes(rawBytes));
}
String _inflateBytes(List<int> bytes) {
// Uses ZLibEncoder on dartvm, zlib.js in browser
}
}
2 つの別個のクラス (ParserHtml と ParserServer) を用意して、コードの重複を避けたいと思います_inflateBytes
。
編集: ここでの具体的な例: https://github.com/radicaled/citadel/blob/master/lib/tilemap/parser.dart。TMX (Tile Map XML) パーサーです。