flutter 的入门demo 已经写好一个星期了,只不过一直都没有整理出博客来。收拾好心情,来整理一下。
继上一篇关于react-native-wx的介绍,是仿照微信界面ui,
由于做为前端开发,有必定的js 基础,全部写起RN来,也不是很吃力。可是这个flutter 用的是一个新的语言 dart做为开发语言,没有学习这个语言,可是不要怕,有开发文档,一切都没有那么难。这个flutter demo,虽然已经写了一个初步的demo,可是你要是问我,这个dart里面的具体的东西,我直言说,‘不会’(由于没有具体去学习这个语言,回过头来讲,若深刻flutter,必学dart),我一路就是对着开发文档和其余参考资料一路"CV"过来。不由想起了这个图片~html
话很少说,也将继续参考微信界面ui开发,项目名称为 flutter-wx,为了避免增长这个入门体验demo的复杂度,只作了几个基本功能页面。项目地址: flutter-wx,欢迎查看!下面截图以下:
文章内,图片不少,占据了必定的篇幅。班门弄斧之做,如有大神见到,敬请指教,有不对不合理之处,敬请指出!我是迩伶贰!前端
以mac 系统为例。
上图看出,flutter 须要的环境有的具备,有的不具备,不一样的操做系统须要配备不一样的软件环境,咱们这里是mac,用的是Xcode,所以,咱们不须要安装Android Studio,忽略第一条,按照第二条提示的安装环境;java
打开vscode, command+shift+p;
初始化以后,以下node
debugger 模式下,跑起来:react
新建文件夹 page, utils, page 下新建多个文件,一个文件表示一个页面,utils 为工具函数, main.dart 为项目的主入口。ios
-- 组件封装
网络请求封装:git
在utils 文件夹新建文件 HttpRequest.dart, 代码写入:
import 'package:dio/dio.dart'; import 'dart:async'; /* * 封装 restful 请求 * * GET、POST、DELETE、PATCH * 主要做用为统一处理相关事务: * - 统一处理请求前缀; * - 统一打印请求信息; * - 统一打印响应信息; * - 统一打印报错信息; */ class HttpUtils { /// global dio object static Dio dio; /// default options static const String API_PREFIX = 'http://18.10.1.115:4000'; // static const String API_PREFIX = 'http://api.wtodd.wang:4000'; static const int CONNECT_TIMEOUT = 10000; static const int RECEIVE_TIMEOUT = 3000; /// http request methods static const String GET = 'get'; static const String POST = 'post'; static const String PUT = 'put'; static const String PATCH = 'patch'; static const String DELETE = 'delete'; /// request method static Future<Map> request ( String url, { data, method }) async { data = data ?? {}; method = method ?? 'GET'; /// restful 请求处理 data.forEach((key, value) { if (url.indexOf(key) != -1) { url = url.replaceAll(':$key', value.toString()); } }); /// 打印请求相关信息:请求地址、请求方式、请求参数 print('请求地址:【' + method + ' ' + url + '】'); print('请求参数:' + data.toString()); Dio dio = createInstance(); var result; try { Response response = await dio.request(url, data: data, options: new Options(method: method)); result = response.data; /// 打印响应相关信息 print('响应数据:' + response.toString()); } on DioError catch (e) { /// 打印请求失败相关信息 print('请求出错:' + e.toString()); } return result; } /// 建立 dio 实例对象 static Dio createInstance () { if (dio == null) { /// 全局属性:请求前缀、链接超时时间、响应超时时间 BaseOptions options = new BaseOptions( baseUrl: API_PREFIX, connectTimeout: CONNECT_TIMEOUT, receiveTimeout: RECEIVE_TIMEOUT, ); dio = new Dio(options); } return dio; } /// 清空 dio 对象 static clear () { dio = null; } }
调用:
请求类型封装github
具体位置使用:
具体使用,不赘述,请查看相关代码;
这里的接口调用依旧是nodejs 提供的接口, nodejsApiweb
目标转移到main.dart,这里是一个项目的主入口文件,为了避免增长项目的复杂度,这里也将路由控制的相关代码写入。分步骤解释以下:
导包:
注册路由表:
底部导航显示:macos
头部icon: Icon(Icons.add_circle_outline), 这里icon flutter 自带了很多的图标,能够自行选择使用,地址:https://api.flutter.dev/flutt...
定义一个动画类
使用:
pubspec.yaml
在这个文件里面,只要写入相关的package,编辑器vscode 会自动下载。pub.dev, 这个dart语言的包整理平台,至关于 咱们熟知的 npm 网站,须要什么package,本身去找相关的api。
相机的调用,比较简单,flutter 提供了这个方法,咱们只要按照api提示操做便可实现。
使用以下:
效果以下:
代码:
效果:
强弱类型语言:咱们常写js这种弱类型语言,一上来看这个强类型的dart,未免会有点懵逼,我的认为,学习语言应该先把强类型语言打好基础,如C java,会一个js,之后看别的语言会有局限性;
flutter的语法嵌套: 虽说方法里面嵌套方法,写起来感受好难受,项目复杂了,编辑器横向的还会出现滚动条,vscode 针对这点也作了友好性的提示,防止多层括号让人眼迷,估计是在vscode 的flutter 插件中植入的;可是,也是由于这样多级自由的嵌套,提供了一个很灵活的方案,一个布局多种方案,能够用不一样的widget实现,同时,这就要多学习几个widget,省的像咱们web “一个div打天下”的单一解决方案。
入门介绍
flutter中文网
图标检索
导航示例
dart package
视频课程讲解
flutter 新手,班门弄斧之demo,如有大神见到,敬请指教,有不对不合理之处,敬请指出!我是迩伶贰!