Skip to content

build_runner fails with "Unsupported conditional import of dart:ui in dart_ui_real.dart" #2703

@rokk4

Description

@rokk4

Have you checked for an existing issue?

Flutter Quill Version

11.5.0

Steps to Reproduce

  1. Add flutter_quill_extensions: ^11.0.0 to a Flutter project
  2. Run dart run build_runner build
  3. Build fails with the above error

Expected results

build_runner should complete successfully without errors from flutter_quill_extensions.

Actual results

flutter_quill_extensions|lib/src/common/utils/dart_ui/dart_ui_real.dart build_modules:module_library (lazy)
E Invalid argument(s): Unsupported conditional import of `dart:ui` found in flutter_quill_extensions|lib/src/common/utils/dart_ui/dart_ui_real.dart:

  export 'dart:ui' if (dart.library.js_interop) 'dart:ui_web';

  This environment does not support direct conditional imports of `dart:` libraries. Instead you must create a separate library which unconditionally imports (or exports) the `dart:` library that you want to use, and conditionally import (or export) that library.
Full Stack Trace
  #0      ModuleLibrary._checkValidConditionalImport (package:build_modules/src/module_library.dart:151:7)
  #1      new ModuleLibrary._fromCompilationUnit (package:build_modules/src/module_library.dart:101:11)
  #2      ModuleLibrary.fromSource (package:build_modules/src/module_library.dart:183:26)
  #3      ModuleLibraryBuilder.build (package:build_modules/src/module_library_builder.dart:32:35)
  <asynchronous suspension>
  #4      runBuilder.buildForInput (package:build_runner/src/build/run_builder.dart:85:7)
  <asynchronous suspension>
  #5      Future.wait.<anonymous closure> (dart:async/future.dart:546:21)
  <asynchronous suspension>
  #6      BuildLogLogger.scopeLogAsync.<anonymous closure> (package:build_runner/src/logging/build_log_logger.dart:58:13)
  <asynchronous suspension>

Additional Context

build_runner fails with "Unsupported conditional import of dart:ui" in dart_ui_real.dart

Description

Running build_runner fails due to an unsupported conditional import pattern in flutter_quill_extensions. The file lib/src/common/utils/dart_ui/dart_ui_real.dart uses a conditional export that build_modules does not support.

Error Message

flutter_quill_extensions|lib/src/common/utils/dart_ui/dart_ui_real.dart build_modules:module_library (lazy)
E Invalid argument(s): Unsupported conditional import of `dart:ui` found in flutter_quill_extensions|lib/src/common/utils/dart_ui/dart_ui_real.dart:

  export 'dart:ui' if (dart.library.js_interop) 'dart:ui_web';

  This environment does not support direct conditional imports of `dart:` libraries. Instead you must create a separate library which unconditionally imports (or exports) the `dart:` library that you want to use, and conditionally import (or export) that library.
Full Stack Trace
  #0      ModuleLibrary._checkValidConditionalImport (package:build_modules/src/module_library.dart:151:7)
  #1      new ModuleLibrary._fromCompilationUnit (package:build_modules/src/module_library.dart:101:11)
  #2      ModuleLibrary.fromSource (package:build_modules/src/module_library.dart:183:26)
  #3      ModuleLibraryBuilder.build (package:build_modules/src/module_library_builder.dart:32:35)
  <asynchronous suspension>
  #4      runBuilder.buildForInput (package:build_runner/src/build/run_builder.dart:85:7)
  <asynchronous suspension>
  #5      Future.wait.<anonymous closure> (dart:async/future.dart:546:21)
  <asynchronous suspension>
  #6      BuildLogLogger.scopeLogAsync.<anonymous closure> (package:build_runner/src/logging/build_log_logger.dart:58:13)
  <asynchronous suspension>

Steps to Reproduce

  1. Add flutter_quill_extensions: ^11.0.0 to a Flutter project
  2. Run dart run build_runner build
  3. Build fails with the above error

Expected Behavior

build_runner should complete successfully without errors from flutter_quill_extensions.

Suggested Fix

The conditional export in dart_ui_real.dart:

export 'dart:ui' if (dart.library.js_interop) 'dart:ui_web';

Should be refactored to use an intermediate library pattern, e.g.:

// dart_ui_native.dart
export 'dart:ui';

// dart_ui_web.dart  
export 'dart:ui_web';

// dart_ui_real.dart
export 'dart_ui_native.dart' if (dart.library.js_interop) 'dart_ui_web.dart';

Environment

Flutter Doctor Output
[✓] Flutter (Channel stable, 3.38.6, on macOS 26.2 25C56 darwin-arm64, locale en-US)
    • Flutter version 3.38.6 on channel stable at /Users/r0/fvm/versions/3.38.6
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 8b87286849 (3 weeks ago), 2026-01-08 10:49:17 -0800
    • Engine revision 78fc3012e4
    • Dart version 3.10.7
    • DevTools version 2.51.1

Package Versions

Package Version
flutter_quill 11.5.0
flutter_quill_extensions 11.0.0
build_runner 2.10.5
build_modules 5.1.6
Flutter 3.38.6 (stable)
Dart 3.10.7

Workaround

Currently, there is no workaround other than not using build_runner with this package, which is not feasible for projects that rely on code generation (e.g., freezed, json_serializable, riverpod_generator).

Related

  • This is likely related to how build_modules validates conditional imports of dart: libraries
  • The pattern used works fine at runtime but fails during build_runner analysis

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions