本文版权归作者AWeiLoveAndroid所有,未经授权,严禁私自转载。转载请声明原文链接和作者信息。
前面一篇文章介绍了
Flutter for Web
,这里就详细的讲解一下如何使用Flutter实现Web页面的编写。让大家10分钟之内快熟上手实践。
flutter doctor -v
查看Flutter版本,如果版本太低,请使用flutter upgrade
升级到最新版本)。关于Flutter的详细安装,请查看我的博客 Flutter从配置安装到填坑指南详解使用命令行进行安装 flutter packages pub global activate webdev
webdev命令会下载以下这些包:
args 1.5.1
async 2.2.0
browser_launcher 0.1.2
build_daemon 0.6.0
built_collection 4.2.1
built_value 6.5.0
charcode 1.1.2
codemirror 0.5.4+5.45.0
collection 1.14.11
convert 2.1.1
crypto 2.0.6
devtools 0.0.19 (0.1.0 available)
devtools_server 0.1.2
dwds 0.3.2
fixnum 0.10.9
http 0.12.0+2
http_multi_server 2.0.6
http_parser 3.1.3
intl 0.15.8
io 0.3.3
js 0.6.1+1
json_annotation 2.3.0
logging 0.11.3+2
matcher 0.12.5
meta 1.1.7
mime 0.9.6+2
octicons_css 0.0.1
package_config 1.0.5
package_resolver 1.0.10
path 1.6.2
pedantic 1.7.0
platform_detect 1.3.5
plotly_js 0.0.1
polymer_css 0.0.1
pool 1.4.0
primer_css 0.0.2
pub_semver 1.4.2
pubspec_parse 0.1.4
quiver 2.0.3
rxdart 0.21.0 (0.22.0 available)
shelf 0.7.5
shelf_proxy 0.1.0+6
shelf_static 0.2.8
shelf_web_socket 0.2.3
source_maps 0.10.8
source_span 1.5.5
split 0.0.2
sse 2.0.2
stack_trace 1.9.3
stream_channel 2.0.0
stream_transform 0.0.19
string_scanner 1.0.4
term_glyph 1.1.0
typed_data 1.1.6
uuid 2.0.1
vm_service_lib 3.15.1+1 (3.15.1+2 available)
watcher 0.9.7+10
web_socket_channel 1.0.12
webdev 2.0.4
webkit_inspection_protocol 0.4.0
yaml 2.1.15
如果出错,提示让你安装stagehand,请输入命令: flutter packages pub global activate stagehand
Stagehand命令会下载以下这些包:
args 1.5.1
async 2.2.0
charcode 1.1.2
collection 1.14.11
http 0.12.0+2
http_parser 3.1.3
meta 1.1.7
path 1.6.2
pedantic 1.7.0
source_span 1.5.5
stagehand 3.3.0
string_scanner 1.0.4
term_glyph 1.1.0
typed_data 1.1.6
usage 3.4.1
打开git客户端,输入 git clone https://github.com/flutter/flutter_web.git
,或者在其它git下载工具中输入git目录。
examples/hello_world/
目录。例如存放路径在F:/flutter_web
,命令行输入cd F:/flutter_web/examples/hello_world/
即可。
使用命令行进行安装 flutter packages pub global activate webdev
使用命令行进行安装stagehand,请输入命令: flutter packages pub global activate stagehand
【注意】如果直接输入这两下命令行会出错,错误提示如下(必须创建Flutter web项目之后,然后打开命令行才有效):
Error: No pubspec.yaml file found.
This command should be run from the root of your Flutter project.
Do not run this command from the root of your git clone of Flutter.
使用命令webdev serve
,然后等待构建完成,第一次运行会比较慢,打开Chrome浏览器,输入http://localhost:8080
,回车即可。
运行结果如下图所示:
flutter packages upgrade
来更新一些依赖的包。这里我们做一个路由跳转,以及写一个Dialog的功能。下面看看我们的示例代码如下:
examples/hello_world/lib/main.dart
代码如下所示:import 'package:flutter_web/material.dart';
void main() {
runApp(new MaterialApp(
title: 'Flutter for Web使用',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new DialogWidgetsDemo(),
));
}
class DialogWidgetsDemo extends StatefulWidget {
@override
_DialogWidgetsDemoState createState() => _DialogWidgetsDemoState();
}
class _DialogWidgetsDemoState extends State<DialogWidgetsDemo> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
centerTitle: true,
title: new Text('各种弹窗&提示控件用法'),
),
body:
new RaisedButton(
child: buildButton('SimpleDialog的使用'),
onPressed: (){
showDialogs(context);
},
),
);
}
Widget buildButton(var text) {
return new Text(
text,
style: new TextStyle(
color: Colors.blueAccent,
fontSize: 16.0,
),
);
}
void showDialogs(BuildContext context){
showDialog<Null>(
context: context,
builder: (BuildContext context){
return new SimpleDialog(
// 标题内容
title: new Text('SimpleDialog示例1'),
// children里面是dialog的内容 可以自定义
children: <Widget>[
buildButton('item1'),
buildButton('item2'),
buildButton('item3'),
buildButton('item4'),
buildButton('item5'),
],
);
}
);
}
}
webdev serve
,我们看看运行结果如下图所示:点击之前的截图如下:
点击按钮之后:
点击按钮之后
其实我们直接把main.dart
放到Flutter工程里面也是可以直接运行在手机上面的。
前面我们是以flutter_web的示例代码为例讲解,实际开发中我们不可能把整个项目下载下来去做修改,我们需要引入这个库。最方便的方式是使用git方式引入,需要在项目的pubspec.yaml
中作如下修改:
environment:
sdk: '>=2.2.0 <3.0.0'
dependencies:
flutter_web: any
flutter_web_ui: any
dev_dependencies:
# Enables the `pub run build_runner` command
build_runner: ^1.4.0
# Includes the JavaScript compilers
build_web_compilers: ^2.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
Visual Studio Code支持使用
Flutter
,选择Flutter: New Web Project
创建项目,然后选择项目创建的路径即可自动生成项目。输入项目名称:
输入项目名称
【注意】如果你未按照上文中的命令安装Stagehand
,这时候可能会提示Stagehand
未安装,点击Activate Stagehand
即可。
pub get
命令,下载所需要的包,如下图所示:analyzer 0.36.3
archive 2.0.8
args 1.5.1
async 2.2.0
bazel_worker 0.1.20
build 1.1.4
build_config 0.4.0
build_daemon 0.6.0
build_modules 2.1.2
build_resolvers 1.0.4
build_runner 1.4.0
build_runner_core 3.0.5
build_web_compilers 2.0.0
built_collection 4.2.1
built_value 6.5.0
charcode 1.1.2
code_builder 3.2.0
collection 1.14.11
convert 2.1.1
crypto 2.0.6
csslib 0.16.0
dart_style 1.2.7
fixnum 0.10.9
front_end 0.1.18
glob 1.1.7
graphs 0.2.0
html 0.14.0+2
http 0.12.0+2
http_multi_server 2.0.6
http_parser 3.1.3
intl 0.15.8
io 0.3.3
js 0.6.1+1
json_annotation 2.3.0
kernel 0.3.18
logging 0.11.3+2
matcher 0.12.5
meta 1.1.7
mime 0.9.6+2
package_config 1.0.5
package_resolver 1.0.10
path 1.6.2
pedantic 1.7.0
pool 1.4.0
protobuf 0.13.11
pub_semver 1.4.2
pubspec_parse 0.1.4
quiver 2.0.3
scratch_space 0.0.3+2
shelf 0.7.5
shelf_web_socket 0.2.3
source_maps 0.10.8
source_span 1.5.5
stack_trace 1.9.3
stream_channel 2.0.0
stream_transform 0.0.19
string_scanner 1.0.4
term_glyph 1.1.0
timing 0.1.1+1
typed_data 1.1.6
vector_math 2.0.8
watcher 0.9.7+10
web_socket_channel 1.0.12
yaml 2.1.15
输入webdev serve
命令行工具来构建和运行您的应用程序,然后在Chrome浏览器输入localhost:8080
回车即可看到示例代码运行的结果,如下图所示:Debug - > Start Debugging
运行应用程序。Create New Project
-->Dart
-->Flutter Web App
-->Next
即可。如下图所示:Flutter for Web
应用程序,选择Dart project
。从Dart project
中,选择应用程序模板的Flutter for web
选项。pub get
将自动运行。run
主工具栏上的按钮。webdev
命令行工具来构建和运行您的应用程序; 应该会打开一个新的Chrome窗口,显示正在运行的应用。要webdev与热重载一起使用,请在项目目录中运行以下命令:
webdev serve --auto restart
【注】无状态的热重载,意味着重新加载时应用程序状态将丢失,如果发现意外行为,则可能需要手动刷新页面。目前官方正在研究有状态的热重载解决方案。
使用以下命令:
webdev build
这将创建一个build
目录index.html
,main.dart.js
以及使用静态HTTP服务器运行应用程序所需的其余文件。
要优化输出JavaScript,可以使用build.yaml
项目根目录中的文件启用优化标志 ,其中包含以下内容:
# See https://github.com/dart-lang/build/tree/master/build_web_compilers#configuration
targets:
$default:
builders:
build_web_compilers|entrypoint:
generate_for:
- web/**.dart
options:
dart2js_args:
- --no-source-maps
- -O4
要启用发布编译命令行,请传入--release
或-r
。
webdev serve -r
或者
webdev serve --release
如果您正在使用Git,我们建议您暂时在你的项目存储库中创建Web的分支,便于管理。
dependencies:
## 替换成 flutter_web
#flutter:
# sdk: flutter
flutter_web: any
dev_dependencies:
## 替换成 flutter_web_test
#flutter_test:
# sdk: flutter
flutter_web_test: any
## 新增Dart web 构建环境
build_runner: ^1.2.2
build_web_compilers: ^1.1.0
test: ^1.3.4
## For the preview, assets are handled differently. Remove or comment
## out this section. See `Assets` below for more details
# flutter:
# uses-material-design: true
# assets:
# - asset/
#
# fonts:
# - family: Plaster
# fonts:
# - asset: asset/fonts/plaster/Plaster-Regular.ttf
## 从Git上引用flutter_web包
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
package:flutter
包换成package:flutter_web
包。dart:ui
包换成package:flutter_ui/ui.dart
包。目前预览版来说,需要创建web/index.html
和web/main.dart
这两个文件夹。这为您的应用程序提供了一个入口点。通常,您复制粘贴下面的文件即可。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script defer src="main.dart.js" type="application/javascript"></script>
</head>
<body>
</body>
</html>
import 'package:flutter_web_ui/ui.dart' as ui;
// TODO: change `my_app` to refer to your app package name.
import 'package:my_app/main.dart' as app;
main() async {
await ui.webOnlyInitializePlatform();
app.main();
}
如果应用程序具有assets资产(字体、json文件、音频、图片等),则它们必须位于web/assets目录中。您可能还需要更新源代码中引用这些资产的路径。
如果应用程序具有自定义字体,则需要将其包含在此文件中。
示例如下:
[
{
"family": "Raleway",
"fonts": [
{
"asset": "fonts/Raleway-Regular.ttf"
},
{
"asset": "fonts/Raleway-Italic.ttf",
"style": "italic"
}
]
},
{
"family": "RobotoMono",
"fonts": [
{
"asset": "fonts/RobotoMono-Regular.ttf"
},
{
"asset": "fonts/RobotoMono-Bold.ttf",
"weight": 700
}
]
}
]
【声明】本文首发于我的公众号Flutter那些事,未经授权严禁转载!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有