Skip to content

[Web] deferred-loading "part" files not generated in Flutter 3.20.0+ #145653

Description

@amake

Steps to reproduce

  1. With Flutter 3.19.4 generate a new project with flutter create my_project

  2. Next to main.dart, introduce a new file foo.dart:

    intfoo() =>1;
  3. In main.dart, import foo as a deferred library and make trivial use of it:

    import'package:flutter/material.dart';
    import'foo.dart' deferred as foo; // new!voidmain() {
    runApp(constMyApp());
    foo.loadLibrary().then((_) =>print(foo.foo())); // new!
    }
    // everything else unchanged from the default main.dart template
  4. Run flutter build web and note that build/web/main.dart.js_1.part.js is generated

  5. Upgrade to Flutter 3.20.0+

  6. Run flutter clean && flutter build web and note that no *.part.js is generated. When deployed, the built application will fail due to missing the part files.

Expected results

The build/web/*.part.js files should be built as with Flutter 3.19 and earlier.

Actual results

The build/web/*.part.js files are not built.

Code sample

Code sample

main.dart

import'package:flutter/material.dart';
import'foo.dart' deferred as foo;
voidmain() {
runApp(constMyApp());
foo.loadLibrary().then((_) =>print(foo.foo()));
}
classMyAppextendsStatelessWidget {
constMyApp({super.key});
// This widget is the root of your application.@overrideWidgetbuild(BuildContext context) {
returnMaterialApp(
title:'Flutter Demo',
theme:ThemeData(
// This is the theme of your application.//// TRY THIS: Try running your application with "flutter run". You'll see// the application has a purple toolbar. Then, without quitting the app,// try changing the seedColor in the colorScheme below to Colors.green// and then invoke "hot reload" (save your changes or press the "hot// reload" button in a Flutter-supported IDE, or press "r" if you used// the command line to start the app).//// Notice that the counter didn't reset back to zero; the application// state is not lost during the reload. To reset the state, use hot// restart instead.//// This works for code too, not just values: Most code changes can be// tested with just a hot reload.
colorScheme:ColorScheme.fromSeed(seedColor:Colors.deepPurple),
useMaterial3:true,
),
home:constMyHomePage(title:'Flutter Demo Home Page'),
);
}
}
classMyHomePageextendsStatefulWidget {
constMyHomePage({super.key, requiredthis.title});
// This widget is the home page of your application. It is stateful, meaning// that it has a State object (defined below) that contains fields that affect// how it looks.// This class is the configuration for the state. It holds the values (in this// case the title) provided by the parent (in this case the App widget) and// used by the build method of the State. Fields in a Widget subclass are// always marked "final".finalString title;
@overrideState<MyHomePage> createState() =>_MyHomePageState();
}
class_MyHomePageStateextendsState<MyHomePage> {
int _counter =0;
void_incrementCounter() {
setState(() {
// This call to setState tells the Flutter framework that something has// changed in this State, which causes it to rerun the build method below// so that the display can reflect the updated values. If we changed// _counter without calling setState(), then the build method would not be// called again, and so nothing would appear to happen.
_counter++;
});
}
@overrideWidgetbuild(BuildContext context) {
// This method is rerun every time setState is called, for instance as done// by the _incrementCounter method above.//// The Flutter framework has been optimized to make rerunning build methods// fast, so that you can just rebuild anything that needs updating rather// than having to individually change instances of widgets.returnScaffold(
appBar:AppBar(
// TRY THIS: Try changing the color here to a specific color (to// Colors.amber, perhaps?) and trigger a hot reload to see the AppBar// change color while the other colors stay the same.
backgroundColor:Theme.of(context).colorScheme.inversePrimary,
// Here we take the value from the MyHomePage object that was created by// the App.build method, and use it to set our appbar title.
title:Text(widget.title),
),
body:Center(
// Center is a layout widget. It takes a single child and positions it// in the middle of the parent.
child:Column(
// Column is also a layout widget. It takes a list of children and// arranges them vertically. By default, it sizes itself to fit its// children horizontally, and tries to be as tall as its parent.//// Column has various properties to control how it sizes itself and// how it positions its children. Here we use mainAxisAlignment to// center the children vertically; the main axis here is the vertical// axis because Columns are vertical (the cross axis would be// horizontal).//// TRY THIS: Invoke "debug painting" (choose the "Toggle Debug Paint"// action in the IDE, or press "p" in the console), to see the// wireframe for each widget.
mainAxisAlignment:MainAxisAlignment.center,
children:<Widget>[
constText(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style:Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton:FloatingActionButton(
onPressed: _incrementCounter,
tooltip:'Increment',
child:constIcon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}

foo.dart

intfoo() =>1;

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs

Executed command

{flutter -v clean && flutter -v build web && ls -al build/web} 2>&1|pbcopy

Flutter 3.19

https://pastebin.com/aLtvFY2c

Flutter 3.20

https://pastebin.com/U7s4MJd7

Flutter Doctor output

Doctor output

Flutter 3.19

Doctor summary (to see all details, run flutter doctor -v):[!] Flutter (Channel [user-branch], 3.19.4, on macOS 14.4 23E214 darwin-x64, locale en-JP) ! Flutter version 3.19.4 on channel [user-branch] at /Applications/flutter Currently on an unknown channel. Run `flutter channel` to switch to an official channel. If that doesn't fix the issue, reinstall Flutter by following instructions at https://flutter.dev/docs/get-started/install. ! Upstream repository unknown source is not a standard remote. Set environment variable "FLUTTER_GIT_URL" to unknown source to dismiss this error.[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0) ✗ cmdline-tools component is missing Run `path/to/sdkmanager --install "cmdline-tools;latest"` See https://developer.android.com/studio/command-line for more details. ✗ Android license status unknown. Run `flutter doctor --android-licenses` to accept the SDK licenses. See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.[✓] Xcode - develop for iOS and macOS (Xcode 15.3)[✓] Chrome - develop for the web[✓] Android Studio (version 2023.2)[✓] IntelliJ IDEA Community Edition (version 2023.3.5)[✓] Connected device (4 available)[✓] Network resources! Doctor found issues in 2 categories.

Flutter 3.20

Doctor summary (to see all details, run flutter doctor -v):[!] Flutter (Channel [user-branch], 3.20.0-0.0.pre, on macOS 14.4 23E214 darwin-x64, locale en-JP) ! Flutter version 3.20.0-0.0.pre on channel [user-branch] at /Applications/flutter Currently on an unknown channel. Run `flutter channel` to switch to an official channel. If that doesn't fix the issue, reinstall Flutter by following instructions at https://flutter.dev/docs/get-started/install. ! Upstream repository unknown source is not a standard remote. Set environment variable "FLUTTER_GIT_URL" to unknown source to dismiss this error.[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0) ✗ cmdline-tools component is missing Run `path/to/sdkmanager --install "cmdline-tools;latest"` See https://developer.android.com/studio/command-line for more details. ✗ Android license status unknown. Run `flutter doctor --android-licenses` to accept the SDK licenses. See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.[✓] Xcode - develop for iOS and macOS (Xcode 15.3)[✓] Chrome - develop for the web[✓] Android Studio (version 2023.2)[✓] IntelliJ IDEA Community Edition (version 2023.3.5)[✓] Connected device (4 available)[✓] Network resources! Doctor found issues in 2 categories.

Metadata

Metadata

Labels

a: buildBuilding flutter applications with the toolassigned for triageissue is assigned to a domain expert for further triagec: regressionIt was better in the past than it is nowfound in release: 3.19Found to occur in 3.19found in release: 3.21Found to occur in 3.21has reproducible stepsThe issue has been confirmed reproducible and is ready to work onplatform-webWeb applications specificallyr: fixedIssue is closed as already fixed in a newer versionteam-webOwned by Web platform teamtoolAffects the "flutter" command-line tool. See also t: labels.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions