Don’t get Flutter and Dart mixed up
I’m working on a game with a Flutter web client and two Dart terminal programs hence the visual pun. Annoyingly, you can’t compile a Dart exe for Linux on a Windows PC. You can do that in C# but I prefer to use Dart.
I have all the classes in two files (one is called classes.dart) and because I’m using JSON to persist game data, I use the build_runner package from pub.dev. Just add this before any classes:
@JsonSerializable()
Make sure if you have enums that every enum value has
@JsonValue('houses')
before it and add functions like this for each class you want to persist; in this case a Location class:
factory Location.fromJson(Map<String, dynamic> json) => _$LocationFromJson(json); Map<String, dynamic> toJson() => _$LocationToJson(this);
Then when it’s all done, do this to generate a file that handles loading and saving the specified classes.
dart run build_runner build
Along the way though I managed to get Flutter into a Dart program. I’m using SQLite but only in Dart, not in the Flutter app. Unfortunately I used the kIsWeb constant to exclude some calls (when the classes are used by the Flutter app) in my classes file. But you can’t do that in a pure Dart program, it will not compile. Instead I wrote my own function.
bool isWeb() { return !Platform.isWindows && !Platform.isLinux; }
Interestingly, the definition of kIsWeb in the API is this below, so it might be worth trying that out.
const bool kIsWeb = bool.fromEnvironment(‘dart.library.js_util’);