发表日期:2018-12 文章编辑:小灯 浏览次数:2121
Google开源的跨端应用解决方案,官方介绍:
Flutter allows you to build beautiful native apps on iOS and Android from a single codebase
Flutter
是谷歌开源的移动UI框架,可在iOS
和Android
快速创建原生用户界面,Flutter是完全免费和开源的,其中脚本语言采用Dart
。
Flutter
组件采用现代响应式框架构建,从React中获得灵感,中心思想是用组件(widget)构建你的UI。 组件描述了在给定其当前配置和状态时他们显示的样子,当组件状态改变,组件会重构它的描述(description),Flutter
会从底层渲染树将当前状态转换到下一个状态所需要的最小更改。
1export PUB_HOSTED_URL=https://pub.flutter-io.cn2export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
flutter.io
官网下载最新包,解压到非系统盘目录;android studio
开发安卓应用,必须在您的机器上安装有android sdk
;flutter_console.bat
,在Dos中输入flutter doctor
安装依赖并自行编译,可能需要10几分钟,请耐心等待,如果flutter命令
无法显示,请将安装目录的bin的目录加入到path路径下;android studio
中安装flutter插件
,在应用商店搜索flutter
安装即可;注:只需要在vs code中安装插件dart和flutter,利用flutter create xxx新建一个flutter项目,利用flutter emulators列出本机AVD列表,选一个模拟器运行:flutter emulators launch AVD_ID即可,在vscode中修改代码,只需要在终端中输入“r”即可实时在模拟器中看到效果,非常轻量和方便。
我们实现一个用户列表,显示最近使用我们sumslack服务的用户列表,并在列表中显示头像,效果如下图:
技术点:
Flutter
采用Dart
语言编写,支持热部署,修改代码后即可在手机在看到实时效果,一个最简单的Hello World的例子如下,从中可看到项目结构:import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Welcome to Flutter', home: new Scaffold( appBar: new AppBar( title: new Text('Welcome to Flutter'), ), body: new Center( child: new Text('Hello World'), ), ), ); } }
基础以上最简单的示例,在我们构建用户列表这个app时,首先主体结构和hello world
例子并无差异,如下dart
代码:
import 'package:flutter/material.dart';import 'package:hello_world/homepage.dart';void main() => runApp(new MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return new MaterialApp( title: '用户列表', theme: new ThemeData( primarySwatch: Colors.orange, ), home: new MyHomePage() ); } }
页面的主体内容是一个ListView
,ListView
里每个ListItem
又是一个复杂Widget
,采用Row
和Column
的布局容器即可实现,MyHomePage.dart
代码如下:
import 'package:flutter/material.dart';import 'package:dio/dio.dart';import 'dart:convert' show json;Dio dio = new Dio();class MyHomePage extends StatefulWidget {@overrideState<StatefulWidget> createState() { return new _MyHomePageState(); } }class _MyHomePageState extends State<MyHomePage>{ List<Model> _items = [];@override void initState() { super.initState(); _getListDate(); }@override Widget build(BuildContext context){ return new Scaffold( appBar: new AppBar( title: new Text("用户列表"), ), body: new ListView.builder(itemCount: _items.length,itemBuilder: itemView,) ); }Widget itemView(BuildContext context,int index){ Model model = this._items[index]; if(index.isOdd) return new Divider(height:2.0); return new Container( color:Color.fromARGB(0x22, 0x49, 0x49,0x8d), child: new Padding( padding: const EdgeInsets.all(8.0), child: new Padding( padding: const EdgeInsets.all(8.0), child: new Column( children: <Widget>[ new Row( children: <Widget>[ Image.network('${model.avator}',width: 70,height: 70,), new Text('${model.uid}',style: new TextStyle(fontSize: 20.0)), ] ), new Center( heightFactor: 2.0, child: new Text("${model.nickname}",style: new TextStyle(fontSize: 25.0),), ) ], ) ) ) ); }void _getListDate(){ //列表来自http请求 Future<Response<String>> response= dio.get("http://wx.sumslack.com/restful/stat/userList.jhtml?p=1"); response.then((item){ List<Model> widgets = []; final dynamic dataJson = json.decode(item.data); final List resultList = dataJson['result']; resultList.forEach((dynamic _user){ print(_user["nickname"]); widgets.add(new Model(_user["uid"],_user["nickname"],_user["avator"])); }); setState(() { _items= widgets; }); }); }}class Model { String uid; String nickname; String avator; Model(this.uid,this.nickname,this.avator); }
在模拟器或手机上运行即可看到截图中的效果,Flutter相比Weex更复杂,毕竟Dart语言平时接触不多,可以在官网:https://flutter.io/docs/get-started/install 找到更多学习材料,阿里技术公众号中有一篇更深入讲解Flutter的文章:《深入理解Flutter的编译原理与优化》
相比阿里开源的Weex,flutter能更好的替代native页面展现复杂的交互页面,性能也更好,weex用来展现内容页面更加合适,还有就是表单类的页面,但对于复杂的页面交互,weex性能略差。
如果你没接触过weex,并且对vue也并不熟悉,那么,笔者强烈建议您使用Flutter作为您的跨端应用解决方案。
日期:2018-10 浏览次数:7250
日期:2018-12 浏览次数:4324
日期:2018-07 浏览次数:4872
日期:2018-12 浏览次数:4171
日期:2018-09 浏览次数:5499
日期:2018-12 浏览次数:9919
日期:2018-11 浏览次数:4801
日期:2018-07 浏览次数:4576
日期:2018-05 浏览次数:4855
日期:2018-12 浏览次数:4323
日期:2018-10 浏览次数:5136
日期:2018-12 浏览次数:6209
日期:2018-11 浏览次数:4459
日期:2018-08 浏览次数:4589
日期:2018-11 浏览次数:12628
日期:2018-09 浏览次数:5577
日期:2018-12 浏览次数:4828
日期:2018-10 浏览次数:4184
日期:2018-11 浏览次数:4525
日期:2018-12 浏览次数:6061
日期:2018-06 浏览次数:4005
日期:2018-08 浏览次数:5433
日期:2018-10 浏览次数:4456
日期:2018-12 浏览次数:4521
日期:2018-07 浏览次数:4360
日期:2018-12 浏览次数:4498
日期:2018-06 浏览次数:4380
日期:2018-11 浏览次数:4372
日期:2018-12 浏览次数:4248
日期:2018-12 浏览次数:5279
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.