博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flutter仿美团应用开发笔记-入门篇
阅读量:6577 次
发布时间:2019-06-24

本文共 2905 字,大约阅读时间需要 9 分钟。

Flutter概览

Flutter是谷歌发布的跨平台开发框架(通过极少的改动即可运行在桌面端,web端,Android与IOS且UI具有高度一致性)并将作为谷歌新操作系统Fuchsia的UI框架。在移动端Flutter通过skia2D绘图引擎保证了各平台UI一致性的同时具有媲美原生应用的流畅度。因Dart语言同时支持JIT编译(Just in Time)和AOT编译(Ahead of Time)使得Flutter支持hot reload。在开发阶段可以帮助您在无需重新启动应用的情况下快速、轻松地进行测试、构建用户界面、添加功能以及修复错误。而在发布时又能获得极高的性能表现。想要了解更多Flutter相关内容请前往Flutter官网(需翻墙): 中文镜像站 :

环境配置

Flutter安装建议参考中文镜像站里的安装教程,包含了配置国内镜像的内容。系统可以是Windows,Linus,macOS。集成开发环境可以选择Android Studio,IDEA, VS Code。

在安装完Flutter插件后新建项目时便会有Flutter项目的选项。
Flutter基础项目如上图所示,android和ios文件夹为对应平台的配置文件和基础架构,lib目录存放编写的dart的文件,pubspec.yaml用来添加依赖库和图片等资源文件。lib目录下自动生成的main.dart文件包含了Flutter应用的入口,通过对该文件的解析可以大致了解Flutter应用结构。

dart语言概览

Flutter框架唯一支持的编程语言为dart。dart语言可以简单的看作Java和JavaScript的结合体,有过面向对象编程语言的小伙伴们都能快速上手。详细的教程参考 这里只介绍一些与其他编程语言的相差较大的部分:

  1. MyHomePage(title: 'Flutter Demo Home Page') 在定义方法时用大括号包裹住的参数为带名称的可选参数,参数前用 @required 注释表明该参数不可省。如:MyHomePage({Key key, this.title}) , this.title表示将传入的值直接赋给属性title。
  2. 在dart中,new关键字永远是可省的,如 return MaterialApp(...)。 变量定义可以是
    String str;final str = ""const str = ""var str = ""dynamic str = ""复制代码
    final和const的区别在于final是只能被赋值一次的常量,可以用另一个变量初始化,而const不能被变量初始化,const的值必须在编译前就能被确定。
  3. 传递方法
    () => _counter++;   //方法体为单行, 约定下划线开头的属性为私有(p1, ...) => ... ;() {}    //方法体为多行(p1, ...) { ... }    复制代码

main.dart文件解析

import 'package:flutter/material.dart';void main() => runApp(MyApp());   //dart中的入口函数,runApp方法启动Flutter应用程序class MyApp extends StatelessWidget {   //在Flutter中一切皆为控件,无论Activity还是布局等。  @override  Widget build(BuildContext context) {    return MaterialApp(   //便捷创建app的控件,可以配置全局颜色主题,路由,国际化等。      title: 'Flutter Demo',      theme: ThemeData(        primarySwatch: Colors.blue,      ),      home: MyHomePage(title: 'Flutter Demo Home Page'),    );  }}//最常用的两大Widget之一。StatefulWidget,可以通过setState方法动态的改变界面class MyHomePage extends StatefulWidget {		  MyHomePage({Key key, this.title}) : super(key: key);  final String title;  @override  _MyHomePageState createState() => _MyHomePageState();}class _MyHomePageState extends State
{ int _counter = 0; void _incrementCounter() { setState(() { //通过改变State中的属性动态的改变界面 _counter++; }); } @override Widget build(BuildContext context) { //Scaffold控件提供了一个路由的基础结构,如appBar,body等。 return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( //使子控件居中 child: Column( //使children中的多个控件垂直排列 mainAxisAlignment: MainAxisAlignment.center, children:
[ Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.display1, ), ], ), ), floatingActionButton: FloatingActionButton( //悬浮按钮 onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), ); }}复制代码

转载于:https://juejin.im/post/5ceb97116fb9a07eab685edb

你可能感兴趣的文章
3个月账期变1秒,蚂蚁区块链解题供应链金融困局
查看>>
使用 FCM 通知您的用户
查看>>
蹭了BCH热度,还来诋毁BCH,这些跳梁小丑到底在玩什么阴谋?
查看>>
模拟自然动画的精髓——TimeInterpolator与TypeEvaluator
查看>>
0911 - 全才才能生存的社会,不够成熟
查看>>
从零开始搭建React/redux/webpack脚手架
查看>>
【Dubbo实战】Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)...
查看>>
使用 LeanCloud 服务做一站式 Chrome 插件开发 —— Favorite Image
查看>>
外包筛选心得
查看>>
markdown 列表下新段落
查看>>
浏览器拦截打开新窗口情况总结
查看>>
《Java工程师成神之路-基础篇》Java基础知识——序列化(已完结)
查看>>
iOS App间相互跳转漫谈 part2
查看>>
Android逆向之路---让我们试试另一种方法看漫画-(2)
查看>>
Java CAS 原理剖析
查看>>
iOS UIButton之UIEdgeInsets详解
查看>>
ISCC2014 writeup
查看>>
Java&Android 基础知识梳理(8) 容器类
查看>>
Kotlin 知识梳理(1) Kotlin 基础
查看>>
Redis内部数据结构详解(5)——quicklist
查看>>