The flutter_test package is able to run Flutter apps 'headless', without requiring any embedder. It would be useful to me to be able to run a command line tool (i.e. not a test) in the same mode. Is this possible? I looked at the flutter_test package but nothing there seems to be the magic solution.
What I've tried:
- Running a CLI tool that depends on Flutter with
dart path/to/tool.dart. This throwsError: Not found: 'dart:ui'. - Running it with
flutter run path/to/tool.dart. This will attempt to start the CLI tool as a regular Flutter app on a device (such as an Emulator, the desktop OS, or a web browser). - Running with
flutter pub run path/to/tool.dartjust generates a lot of errors, such as"Error: 'Paint' isn't a type". I tried all approaches suggested in this related SO Question, with the script living in various directories and using different invocations, but no luck. - Running the tool using
flutter test path/to/tool.dartdoes work, and it runs the code inmain()like one would expect. But I consider this a hacky workaround, sinceflutter test(unsurprisingly) expects a test, and exits with the error "No tests were found." And, semantically, it's just wrong. This is not a test. It's a tool.
CodePudding user response:
If your code relies on package:flutter or dart:ui, you won't be able to run it outside of a Flutter engine instance (e.g., flutter_tester or a Flutter application) as dart:ui is a custom core library for Flutter that isn't part of Dart's core libraries. Short of hacking away at flutter_tester to remove the test runner related logic or creating your own custom embedder of the Flutter engine, you won't be able to run a Flutter project headless on the command line.
Ideally, you'd just refactor your tool to not depend on dart:ui at all, but given your background I'm guessing you're trying to do something non-standard that actually requires functionality from the Flutter framework... :-)
