Flutter For Web: A Complete Guide to Create & Run a Web Application


Source: https://cdn-images-1.medium.com/max/1600/0*gD64Y8ECWBBuSZrx

At Google I/O 2019 developer conference, Google launched version 1.5 of Flutter,
it's open source mobile UI framework that helps developers build native interfaces for Android and iOS. But that’s no longer true: The mobile framework is now a multi-platform UI framework, supporting the web, desktop, mobile, and even embedded devices. Flutter’s mission has expanded to building “the best framework for developing beautiful experiences for any screen.”

Introduction

Flutter was first announced at Google I/O in May 2017 with an alpha toolkit and
in 2018 at Google I/O, it finally hit version 1.0 with a future new product, called HummingBird. We were all excited and could not wait for its release date and on May 7th 2019 at Google IO 2019, Google finally announced the availability of the Flutter for Web preview version.

Flutter has been created to give developers a fast development framework, and to
users, a great engaging and fast experience. Flutter for web is a code-compatible implementation of Flutter that is rendered using standards-based web technologies: HTML, CSS and JavaScript. With Flutter for web, you can compile existing Flutter code written in Dart into a client experience that can be embedded in the browser and deployed to any web server. You can use all the features of Flutter, and you don’t need a browser plug-in.

How to install

In-order to develop for web you need flutter 1.5 and above, it enable support
for targeting the web with Flutter, including Dart compilation to JavaScript. To
use the Flutter SDK with the flutter_web preview make sure you have upgraded
Flutter to at least v1.5.4 by running flutter upgrade from your machine.

$ flutter upgrade

To install the webdev package, which provides the build tools for Flutter for web, run the following:

$ flutter packages pub global activate webdev

Ensure that the $HOME/.pub-cache/bin directory is in your path, and then you
may use the webdev command directly from your terminal.

In-order to add$HOME/.pub-cache/bin to your path, open path file by running
below mentioned command from your terminal.

$ touch ~/.bash_profile; open ~/.bash_profile

It will open the file with TextEdit, make sure to have a reference to all components in your PATH and save it. If you open it again you’ll find your edits.

flutter sdk:
export PATH=$PATH:[Path to your flutter directory]/flutter/bin

dart sdk:
export PATH=$PATH:[Path to your flutter directory]
/flutter/bin/cache/dart-sdk/bin

webdev:
mac: export PATH=$PATH:$HOME/.pub-cache/bin
windows: %USERPROFILE%\AppData\Roaming\Pub\Cache\bin
linux: $HOME/flutter/.pub-cache/bin

Note: if you have problems configuring webdev to run directly, try:
flutter packages pub global run webdev [command].

Now that we are done setting up our development environment, let’s move forward to the next step of creating a web project.

Tools support for Flutter web development

Once the environment setup is done, you are gonna be needing an IDE to start
developing for web. Choose your favourite IDE and follow the step by step
instructions available below:

Visual Studio Code

Visual Studio Code supports Flutter web development with the v3.0 release of the
Flutter extension.

  • install the Flutter SDK
  • set up VS Code
  • configure VS Code to point to your local Flutter SDK
  • run the Flutter: New Web Project command from VS Code
  • after the project is created, run your app by pressing F5 or “Debug -> Start
    Debugging”
  • VS Code will use the webdev command-line tool to build and run your app; a new Chrome window should open, showing your running app

Using from IntelliJ

  • install the Flutter SDK
  • set up your copy of IntelliJ or Android Studio
  • configure IntelliJ or Android Studio to point to your local Flutter SDK
  • create a new Dart project; note, for a Flutter for web app, you want to start
    from the Dart project wizard, not the Flutter project wizard
  • from the Dart project wizard, select the ‘Flutter for web’ option for the
    application template
  • create the project; pub get will be run automatically
  • once the project is created, hit the run button on the main toolbar
  • IntelliJ will use the webdev command-line tool to build and run your app; a
    new Chrome window should open, showing your running app

Using Android Studio

In Android Studio there is no direct plug-in or template to create a web project, instead you can use Stagehand package that helps you get your web project set up. Stagehand is basically a Dart project scaffolding generator, inspired by tools like Web Starter Kit and Yeoman. In-order to create a web project with Stagehand, you need to follow the instructions below:

  • install the Flutter SDK
  • set up your copy of Android Studio
  • configure Android Studio to point to your local Flutter SDK
  • now run the following command from your terminal to install Stagehand $ pub global activate stagehand
  • once Stagehand is installed, you can use it to generate a project skeleton into
    the desired directory. As an example, here is how you create a simple web project with Stagehand:
$ mkdir flutter_web_project  
$ cd flutter_web_project  
$ stagehand web-simple

And to list all of the project templates:

$ stagehand

  • once the project is created, open that project in Android Studio and add the
    following dependencies in your pubspec.yaml file
 dependencies:
   flutter_web: any
   flutter_web_ui: any
 dev_dependencies:
   # Enables the `pub run build_runner` command
   build_runner: ^1.1.2
   # Includes the JavaScript compilers
   build_web_compilers: ^1.0.0
 # flutter_web packages are not published to pub.dartlang.org
 # These overrides tell the package tools to get them from GitHub
 dependency_overrides:
   flutter_web:
     git:
       url: https://github.com/flutter/flutter_web
       path: packages/flutter_web
   flutter_web_ui:
     git:
       url: https://github.com/flutter/flutter_web
       path: packages/flutter_web_ui
  • run pub get from your terminal, this will download all the necessary packages
  • once done; create a lib folder in the root directory of your project
  • now create amain.dart file in the lib folder and paste the following code in it:
import 'package:flutter_web/material.dart';

void main() => runApp(Text('Hello World', textDirection:
 TextDirection.ltr));
  • once you are done; open the main.dart file present in web folder and paste the following code in it:
import 'package:fancy_proj/main.dart' as app;
import 'package:flutter_web_ui/ui.dart' as ui;

main() async {
  await ui.webOnlyInitializePlatform();
  app.main();
}
  • once everything is done, you are ready to test your web project. Run your app by typing the following command in your terminal:
$ webdev serve

[INFO] Generating build script completed, took 331ms
...
[INFO] Building new asset graph completed, took 1.4s
...
[INFO] Running build completed, took 27.9s
...
[INFO] Succeeded after 28.1s with 618 outputs (3233 actions)
Serving `web` on http://localhost:8080

Open http://localhost:8080 in Chrome and you should see Hello World in red text in the upper-left corner.

Getting (stateless) hot-reload with webdev

To use webdev with hot-reload, run the following within your project directory:

$ webdev serve --auto restart

You’ll notice a similar output to flutter packages pub run build_runner serve but now changes to your application code should cause a quick refresh of the application on save.

Note: the --hot-reload option is not perfect. If you notice unexpected
behaviour, you may want to manually refresh the page.

Note: the --hot-reload option is currently "stateless". Application state will
be lost on reload. We do hope to offer "stateful" hot-reload on the web – we're actively working on it!

Stagehand templates

There are many different templates available for Stagehand, a list all project templates are listed below:

  • console-full - A command-line application sample.
  • package-simple - A starting point for Dart libraries or applications.
  • server-shelf - A web server built using the shelf package.
  • web-angular - A web app with material design components.
  • web-simple - A web app that uses only core Dart libraries.
  • web-stagexl - A starting point for 2D animation and games.

Useful resources

Zubair Rehman

Android|Flutter Developer @ Embrace IT

Islamabad, Pakistan

Subscribe to Dart Academy

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!