热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter的基本介绍通过Flutter的第一个项目

前言Flutter从2018年2月底在世界移动大会(MWC)发布第一个bata版;5月的GoogleIO大会上发布bata3;6月底GMTC宣布了首个预览版;9月谷歌开发者大会上发

前言

Flutter从2018年2月底在世界移动大会(MWC)发布第一个bata版;5月的GoogleI/O大会上发布 bata3;6月底GMTC宣布了首个预览版;9月谷歌开发者大会上发布预览版2;12月宣布发布正式版1.0版。而且5月I/O大会后据说闲鱼已经在使用了,可谓发展之迅速,应该还是很被大家看好的。

本文算是看了谷歌官方文档及flutter文档的翻译加上自己的肤浅理解的总结吧。原文可查看官方文档链接:

https://mp.weixin.qq.com/s/hCIN42OMmmc6HkOveegwWQ

https://flutter.io/docs/get-started

基本概念

跨平台的UI工具包。即一套代码可以同时在iOS和Android上构建,逻辑层还是可以由不同平台各种实现。可以把 Flutter 理解为应用内置的一个引擎,把这个引擎引入到现有的工程里。

优点

  • 在Flutter里几乎所有内容都是widget,通过不同的widget堆叠任何图形、文本、视频和控件。不受框架局限性的干扰,同时适用于iOS和Android。
  • 速度快,它基于 Skia 2D 硬件加速图形引擎,该引擎也同样用在了 Chrome 和 Android 平台。Flutter 的代码基于 Dart 平台,它可以被编译成 iOS 和 Android 平台上 32 位和 64 位的 ARM 代码。
  • 高效。Flutter 引入了 Stateful Hot Reload(保持应用状态的热重载),可在应用运行时修改应用UI而不用重新启动。
  • 开放的。Flutter 是一个基于 BSD-style 许可的开源项目。

安装环境及下载插件

参考官网地址:https://flutter.io/docs/get-started/install/macos

1、下载flutter源码并解压
2、配置环境变量

我选择配置全局的

  • 打开终端,在根目录下使用open .bash_profiler打开bash_profiler.
  • 添加flutter的环境变量:export PATH=$PATH:[PATH_TO_FLUTTER_GIT_DIRECTORY]/flutter/bin,也就是flutter的bin目录。
  • 执行命令刷新文件:source .bash_profiler
  • 验证是否配置成功:echo $PATH,输出的环境变量中有flutter的变量。
3、检查flutter需要的软件是否齐全

输入命令:flutter doctor,会出现以下类似文案,表明的是需要的环境是否已OK,如果需要更新,跟着提示的命令行走即可。

[✓] Flutter (Channel stable, v1.0.0, on Mac OS X 10.14 18A391, locale
    zh-Hans-CN)
[!] Android toolchain - develop for Android devices (Android SDK 28.0.2)
    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor
      --android-licenses
[!] iOS toolchain - develop for iOS devices (Xcode 10.1)
    ✗ libimobiledevice and ideviceinstaller are not installed. To install with
      Brew, run:
        brew update
        brew install --HEAD usbmuxd
        brew link usbmuxd
        brew install --HEAD libimobiledevice
        brew install ideviceinstaller
    ✗ ios-deploy not installed. To install with Brew:
        brew install ios-deploy
[✓] Android Studio (version 3.1)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[!] Connected device
    ! No devices available
  1. 已安装flutter稳定版
  2. Android 工具链不完善—使用提示的命令完善
  3. iOS工具链不完善(iOS真机调试)
  4. AS没有安装flutter插件,打开AS-preference-添加插件。
完善iOS工具链注意点:
  1. brew update 可能需要较长的时间。

  2. brew install --HEAD usbmuxd 出现错误:

    An exception occurred within a child process:
      RuntimeError: /usr/local/opt/autoconf not present or broken
    Please reinstall autoconf(或者是automake\libtool\pkg-config). 
    

    **解决办法:**重新安装autoconf,如果系统中有autoconf,先执行brew unlink autoconf,然后执行brew reinstall autoconf

3.brew install --HEAD usbmuxd 出现错误:

make install
Last 15 lines from /Users/zeng/Library/Logs/Homebrew/usbmuxd/03.make:
        uint64_t ri_system_time;
        ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/sys/resource.h:213:2: error: unknown type name 'uint64_t'
        uint64_t ri_pkg_idle_wkups;
        ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/sys/resource.h:214:2: error: unknown type name 'uint64_t'
        uint64_t ri_interrupt_wkups;
        ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[1]: *** [collection.lo] Error 1
make[1]: *** Waiting for unfinished jobs....
20 errors generated.
make[1]: *** [socket.lo] Error 1
make: *** [install-recursive] Error 1

READ THIS: https://docs.brew.sh/Troubleshooting

**这里寻找了很多解决版本解决不了,如各位有好的解决办法烦请告知!**这些错误不影响Flutter项目的构建,只不过不能使用iOS真机调试,模拟器还是可以的,但是不知道是上面报错的原因还是电脑问题,每次使用iOS的模拟器,电脑的风扇就转的特厉害,发热的特厉害。android模拟器和真机没有问题。

项目架构

  • android: Android平台代码

  • ios:ios 平台代码

  • lib:跨平台代码,也就是Flutter项目的主要代码

    • main.dart :Flutter项目的入口文件
  • test:测试代码

  • pubspec.lock :由pub生成的已经被pull下来的包及其版本号。

  • pubspec.yaml :项目描述文件,这里填写项目名称、版本号,构建环境,添加的依赖

    name: flutter_app    //项目名称
    description: A new Flutter application. //描述
    
    version: 1.0.0+1  //构建版本
     
    environment:
      sdk: ">=2.0.0-dev.68.0 <3.0.0"
    
    //正式版添加的依赖,最后编译到程序中
    dependencies:
      flutter:
        sdk: flutter
      cupertino_icons: ^0.1.2
      english_words: ^3.1.0
      
    //开发版本添加的依赖,不会编译到程序中
    dev_dependencies:
      flutter_test:
        sdk: flutter
        
    //Flutter相关配置    
    flutter:
    
      # The following line ensures that the Material Icons font is
      # included with your application, so that you can use the icons in
      # the material Icons class.
      //是否适用material-design 的icon
      uses-material-design: true
    
    //将资源添加到这里才可以使用
      # To add assets to your application, add an assets section, like this:
      # assets:
      #  - images/a_dot_burr.jpeg
      #  - images/a_dot_ham.jpeg
    

程序编写

  1. **引入三方包:**在pubspec.yaml 文件中添加包名。

    dependencies:
      flutter:
        sdk: flutter
    
      cupertino_icons: ^0.1.2
      english_words: ^3.1.0  //添加的第三方包名称及版本号
    
  2. 在文件中引入包名:import ‘package:包名/类名’

Flutter 的入口方法:
///入口
void main() => runApp(MyApp());
///StatelessWidget 无状态,使得app本身就是一个weight
class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
//    final word = WordPair.random();

    return MaterialApp(
      //应用标题
      title: 'Flutter Demo',
      home: RamdowWords(),

      ///Scaffold 提供一个默认的 bar title  body属性
//      home: Scaffold(
//        appBar: AppBar(
//          title: Text("welcome to flutter"),
//        ),
//        body: Center(
////          child: Text("Hello world"),
////          child: Text(word.asPascalCase),
//          child: RamdowWords(),
//        ),
//      ),
    );
  }
}

说明:

  • 在Flutter中几乎所有东西都是widget。

  • StatelessWidget:无状态weight,不可变,也就是他们的属性无法被改变,都是使用final修饰。

  • StatefulWidget:有状态widget,可以在生命周期内发生状态的改变。 创建有状态的部件一般需要创建两个类:一个继承StatefulWidget,重写:createState()方法,另一个State class,主要处理程序的大部分逻辑及状态。

  • HotReload:需要保持App运行,不能关闭App。

//有状态的weight
class RamdowWords extends StatefulWidget {
  //创建他的State class
  @override
  State createState() {
    // TODO: implement createState
    return new RamdowWordsState();
  }
}

//State class
//处理程序的大部分逻辑和状态
class RamdowWordsState extends State {
  final _suggestiOns= [];
  final _fOntSize= const TextStyle(fontSize: 18.0);

	//重写build 方法
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
//    final wordPair = WordPair.random();
    //创建 数组
//    return Text(wordPair.asPascalCase); //首字母大写

      return Scaffold(
        appBar: AppBar(
          title: Text("generator name"),
        ),
        body: _buildSuggestions(),
      );
  }
}
生成Listview 的方法
 //添加生成list view的方法
  Widget _buildSuggestions() {
    return ListView.builder(
        padding: const EdgeInsets.all(16.0),
        //每次都会回调到这
        itemBuilder: (context, i) {
          if (i.isOdd) return Divider(); //1像素的分割线

          // i 依次/2 的商,这将计算ListView中实际的单词配对数量减去分频器小部件。
          final index = i ~/ 2;
          //达到底部,多添加 10个item
          if (index >= _suggestions.length) {
            _suggestions.addAll(generateWordPairs().take(10));
          }

          return _buildRow(_suggestions[index]);
        });
  }
  
   
   //设置每一行的名字
  Widget _buildRow(WordPair wordPair) {
      return ListTile(
          title: Text(wordPair.asPascalCase,style: _fontSize,),

      );
  }
}

效果图(使用官方图):
Flutter的基本介绍--通过Flutter的第一个项目


推荐阅读
  • 在安装 iOS 开发所需的 CocoaPods 时,用户可能会遇到多种问题。其中一个常见问题是,在执行 `pod setup` 命令后,系统无法连接到 GitHub 以更新 CocoaPods/Specs 仓库。这可能是由于网络连接不稳定、GitHub 服务器暂时不可用或本地配置错误等原因导致。为解决此问题,建议检查网络连接、确保 GitHub API 限制未被触发,并验证本地配置文件是否正确。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
    本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • PHP-Casbin v3.20.0 已经发布,这是一个使用 PHP 语言开发的轻量级开源访问控制框架,支持多种访问控制模型,包括 ACL、RBAC 和 ABAC。新版本在性能上有了显著的提升。 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • Docker 中创建 CentOS 容器并安装 MySQL 进行本地连接
    本文详细介绍了如何在 Docker 中创建 CentOS 容器,并在容器中安装 MySQL 以实现本地连接。文章内容包括镜像拉取、容器创建、MySQL 安装与配置等步骤。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 使用 Firefox Developer Edition 70.0 数日后,体验令人满意 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
author-avatar
小肥沙沙2006_759
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有