I am working on a project for using Flutter web and js size is getting increasing as I add features which is normal. I was looking at deferred import for Flutter and tried I out where I am getting split files as

I ran flutter run -d chrome which was working fine as I came to know deferred is ignored in debug build and when I ran with http-server npm package nothing is coming even looking at network request it was requesting part files but nothing is being displayed on screen and even no errors in console. I know Flutter Web recently move to beta so there might be optimisations like specially reducing size of main.dart.js but this should work according to doc.

import 'package:flutter/material.dart';
import 'package:split_test/page1.dart' deferred as page1;
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
  const MyApp({Key key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Container(
          child: page1.Page1(),
        ),
      ),
    );
  }
}
import 'package:flutter/material.dart';
import 'package:split_test/page2.dart' deferred as pag2;
class Page1 extends StatelessWidget {
  const Page1({Key key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Center(
        child: Column(
          children: <Widget>[
            Text('Page1'),
            GestureDetector(
              onTap: () => Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => pag2.Page2(),
                ),
              ),
              child: Text('Go to page 2'),
            )
          ],
        ),
      ),
    );
  }
}
import 'package:flutter/material.dart';
class Page2 extends StatelessWidget {
  const Page2({Key key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Center(
          child: Column(
            children: <Widget>[
              Text('Page2'),
              GestureDetector(
                onTap: () => Navigator.pop(context),
                child: Text('<- Back'),
              )
            ],
          ),
        ),
      ),
    );
  }
}
Thank you for your help. I was looking at this issue.
You can use Dart's deferred imports for doing something like that.
See this for more details : https://dart.dev/guides/language/language-tour#lazily-loading-a-library
Also for flutter there is an important discussion going on about this in this issue here regarding giving proper support for code splitting for flutter web : https://github.com/flutter/flutter/issues/50196
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With