likes
comments
collection
share

Flutter入门到进阶(二)-创建Flutter工程

作者站长头像
站长
· 阅读数 3

创建Flutter工程

我们已经配好了Android StudioFlutter环境,那么我们接下来就是用Android Studio来创建工程: Flutter入门到进阶(二)-创建Flutter工程 打开Android Studio,然后点击New Flutter ProjectFlutter入门到进阶(二)-创建Flutter工程 选中Flutter,确保Flutter SDK path后边的路径正确,然后点击nextFlutter入门到进阶(二)-创建Flutter工程

  • Project name:工程名字;需要注意的是,Flutter工程名字不能使用驼峰命名格式,Flutter推荐使用下划线(_)来链接;
  • Project location:工程存放目录;需要注意的是,如果在修改目录之前,输入了工程名字,那么目录会多一级工程名字的路径,如果更改了目录之后,在输入名字,那么路径会少一级工程名字的路径,需要手动补全;
  • Description:工程描述;
  • Project typeFlutter工程类型;分为ApplicationPluginPackageModule四种;
    • ApplicationFlutter工程;
    • PluginFlutter插件,里边包含Dart代码和各平台相应的原生代码;
    • PackageFlutter框架包,比如第三方框架,里边只有Dart代码;
    • Module:是进行Flutter混合开发时使用的,比如与原生混合开发;
  • Organization:组织,类似于Xcode创建iOS工程时,填写Bundle ID的功能;
  • Android languageAndroid原生工程开发语言;Java或者Kotlin
  • iOS languageiOS原生工程开发语言;Objective-C或者Swift
  • Platforms:可选的支持平台;AndroidiOSLinuxMacOSWeb或者Windows

More Settings里边的设置项可以不用修改,直接使用;

点击Finish创建工程: Flutter入门到进阶(二)-创建Flutter工程

第一次创建项目,会从网络上拉取数据,会消耗点时间;

Flutter入门到进阶(二)-创建Flutter工程 此处选择不同的选项,目录显示状态也会有所不同,我们一般选择Project选项,目录如下: Flutter入门到进阶(二)-创建Flutter工程

这个时候的文件目录,与工程在文件夹里边的目录是一致的;

  • androidAndroid工程目录;
  • iosiOS工程目录;
  • lib:我们存放Dart代码的目录;

Android Studio的控制台我们可以看到,虽然使用的是Android Studio运行的Flutter项目,但是由于我们的设备是iPhone,所以最终还是要借助于Xcode来实现编译安装Flutter入门到进阶(二)-创建Flutter工程 运行效果,界面如下: Flutter入门到进阶(二)-创建Flutter工程 至此,我们已经将Flutter示例工程运行成功了;

Android Studio中Flutter的一个小bug

如果我们的Android Studio正在运行Flutter项目,这个时候我们使用快捷键comman+Q进行强退,那么Flutter将会有一定概率出现lock锁死状态;这个时候,我们再次打开项目运行将会出现问题;这是因为为了保护数据,Android Studio存在一个缓存机制;解决方案就是删除缓存文件; 缓存文件存放位置在Flutter SDK目录下:

flutter/bin/cache/

此目录下有一个文件lockfile,将其删除即可; Flutter入门到进阶(二)-创建Flutter工程

Flutter的优势

我们以前使用ReactNative是在原生UI的基础上进行的封装,需要通过JavaScript代码调用RN框架,然后通过原生控件进行渲染;那么就会产生一个问题,如果UI层进行了更新升级,那么RN就需要马上升级版本进行适配兼容,对原生的依赖性非常强; Flutter并非基于原生UI进行封装的,Flutter会将一个专门的渲染引擎安装在手机上,所以引入Flutter之后,安装包体积将会增大;引擎负责解析Dart代码,渲染界面;不依赖于原生UI,且效率很高;因为基于同一套渲染引擎,所以AndroidiOS两个平台,渲染效果高度统一;

关于热更新

由于Apple禁止了热更新功能在App中的使用,所以Flutter对外宣称不支持热更新;但是我们注意到在Debug版本中存在热重载功能,在Release版本中则不存在此功能;那么基于热重载功能,开发者可以自定义开发热更新功能;这就需要修改渲染引擎,较为复杂,需要技术难度较高;