🌊

FlutterやdartでマルチプラットフォームでWeb, JS, IOなどを使う

2024/11/26に公開

何が困るのか

例えばFlutterでimport 'package:js'import 'dart:js'と書いてAndroidで実行すると、エラーが出ます。

if (kIsWeb){
    import 'package:js';
}
'if' can't be used as an identifier because it's a keyword.
Try renaming this to be an identifier that isn't a keyword.

これからは、JSパッケージで@JSを使う前提で書きます。

どうすればいいのか

コンパイルエラーが発生してしまうので、代わりに例外に変換すればいいです。
3つdartファイルが必要です。

  1. main.dart
  2. js_or_empty.dart
  3. web_import_except.dart
main.dart
import 'js_or_empty.dart';

("exampleJSFunction")
external void _exampleJSFunction();


void main() async {
  if (kIsWeb) {
    _exampleJSFunction();
  }
}
js_or_empty.dart
export 'web_import_except.dart' if (dart.library.js) 'package:js/js.dart';
web_import_except.dart
class JS {
  final String? name;
  const JS([this.name]);
}

Discussion