flutter开发_flutter开发h5 - CSDN
精华内容
参与话题
  • 三、Flutter开发环境配置 1、系统要求 2、设置Flutter镜像(非必须) 3、获取Flutter SDK 四、iOS开发环境配置 1、安装Xcode9.0或者更高的版本 2、配置Xcode命令行工具 3、确保Xcode许可协议是已经通过授权的...

    目录

    前言

    一、Flutter到底是什么?

    二、开发系统与工具选择

    1、开发系统的选择

    2、开发工具的选择

    三、Flutter开发环境配置

    1、系统要求

    2、设置Flutter镜像(非必须)

    3、获取Flutter SDK

    四、iOS开发环境配置

    1、安装Xcode9.0或者更高的版本

    2、配置Xcode命令行工具

    3、确保Xcode许可协议是已经通过授权的

    1、创建项目

    2、查看项目目录

    3、运行项目

    五、安卓开发环境配置

    1、安装JDK

    2、安装AndroidStudio

    3、安装Flutter插件和Dart插件

    4、打开运行Flutter项目


    前言

    距离上一次写文章到现在有小半年的时间了,产出确实有点低了,这也和个人的懒惰有很大的关系,今天正好抽出空来写篇文章。一开始是打算写一篇年中总结的,但是想了想这半年自己也没什么值得说的分享给大家,所以还是聊点和技术相关的吧。最近在几个群里,很多朋友都想要学习Flutter相关的技术,所以今天就和大家来聊聊这个时下很热门的一个技术——Flutter,做移动端研发的应该多多少少都有听过这个东西吧,尤其做安卓的,不知道的也没关系,可以到谷歌或者百度上面搜索了解一下,我相信多多少少会让你眼前一亮。

    一、Flutter到底是什么?

    我们在谷歌上搜索就可以看到很多和flutter相关的内容,简单来说它是谷歌开发的一套开源的跨平台软件开发工具包,最初是支持移动端跨平台开发,可以运行在Android和iOS两个平台上。在今年5月份的谷歌I/O大会上,发布了Flutter 1.5预览版,同时支持Android、iOS、Web、桌面和嵌入式设备,可以说是做到了全平台的支持,不过由于目前尚不成熟,它在国内的使用率并不高,不过可以看到它是Google Fuchsia系统的主要开发应用工具,这个Fuchsi也是谷歌正在研发的新的系统,可以说Flutter是顶着光环横空出世的,未来前景还是非常好的。目前国内也有人在使用Flutter做移动端开发了,比如阿里的闲鱼团队就在部分模块使用了Flutter做了混合式开发,这里有一份闲鱼的访谈,可以看一下:https://mp.weixin.qq.com/s/kCa9qVBkvYRSAGmxyInIPQ

    Flutter的官方开发语音是Dart语言,它是谷歌开发的一门脚本语言,最初是为了替代JavaScript而生的,不过后来由于NodeJs的诞生,使得它又被遗忘在角落里了。不过它还是很幸运,被应用在了谷歌内部的一个名为Sky的移动开发框架项目上,从此进入了移动开发领域,后来这个Sky改了个名字,成为了现在的Flutter,并且Dart还被定为谷歌的未来操作系统Fuchsia的官方开发语言。在Dart2.0之前是弱类型语言,2.0开始变更为强类型语言,属于应用层语言,有自己的DartVM,通常情况下运行在自己的虚拟机上,但是在特定情况下它也可以编译成 Native Code 运行在硬件上(比如移动开发框架中,Flutter 会将代码编译成指定平台的 Native Code 以提高性能),它比 JAVA 简单,易于理解,比JavaScript 更加规范,更加工程化。

    二、开发系统与工具选择

    1、开发系统的选择

    Windows和Mac都可以用来开发Flutter,那么我们该选用哪一个呢?来看一张对比图:

    如果大家既想开发Android,又想开发iOS,在经济允许的条件下可以选择苹果电脑,如果没有iOS方面的需求,经济条件有限的情况下可以选择Windows电脑。

    2、开发工具的选择

    该选用Android Studio还是Visual Studio Code呢?

    AS和VSCode都可以用来开发Flutter,VSCode因为是前端开发工具,所以它无法调试我们的Android项目,所以我们如果选择VSCode的话,还需要再装一个AS,但是AndroidStudio不光可以开发Flutter,还可以开发调试Android项目,另外有一个很重要的点,它是谷歌的亲儿子,因为Flutter是谷歌开发的,AndroidStudio也是谷歌开发的,所以Flutter的一些新特性,包括一些新的调试支持,AS是首先适配的,它的优先级要比VSCode高很多,所以推荐大家使用AS开发Flutter,它的开发体验和调试支持要比VSCode更加成熟,也是官方推荐的Flutter开发工具。

    三、Flutter开发环境配置

    1、系统要求

    这里先以Mac系统为例作为说明,后续条件满足的话再补充Windows环境下的配置

    2、设置Flutter镜像(非必须)

    这一步主要是为了方便那些没有VPN或者不能翻墙的朋友,因为访问Flutter的环境需要能够访问外网。由于在国内访问Flutter可能会受到限制,所以Flutter官方为中国开发者搭建了临时镜像,需要注意的是,这个镜像是临时镜像,不能保证一直可以使用,可能会不定时的更新,大家可以从Flutter官网上面获取镜像服务器的最新动态:https://flutter.dev/community/china,打开网址页面往下滑就可以看到了:

    然后大家可以把找到的环境变量配置到自己的用户环境变量中,如何配置呢?

    首先打开终端,然后使用open -e .bash_profile命令打开我们的bash_profile文件,然后把上图中的环境变量export那两行复制放到profile文件的最后面,保存并关闭窗口,重新打开终端进入到文件中查看是否已经配置完毕,如下图所示,这样就完成了Flutter镜像的配置工作。

    3、获取Flutter SDK

    首先我们需要下载Flutter的SDK,这个可以到Flutter的官网上面进行下载,最好是下载一个稳定版的SDK:

    我这边是下载了1.2.1的版本,下载完成之后解压安装包到一个你想要安装的目录下面,这个目录一定要记清楚,然后同样的需要把它配置到环境变量里面,和2步的方法一致,配置到.bash_profile文件的最下方,注意这里需要配置一个全路径到bin这一层,如下图所示:

    到这里我们的Flutter开发环境就已经配置完成了,我们可以在终端上通过 flutter doctor 命令来检测一下是否安装成功,这个命令第一次运行的时候会很慢,运行成功以后它会列出已经安装配置好的列表项,我这里安装的是1.2.1的稳定版:

    四、iOS开发环境配置

    1、安装Xcode9.0或者更高的版本

    这个大家可以根据自己的系统实际支持的版本而定,来下载自己需要的版本,两种方式:一、可以到官网上下载:https://developer.apple.com/xcode/ ;二、可以到App Store上下载,但是第二种现在好像只有最新版的安装包,所以如果你的系统不支持的话,还是需要自己去找到对应的版本下载。

    2、配置Xcode命令行工具

    通过命令:sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer 即可安装xcode的命令行工具,后面的路径需要根据自己的实际安装路径进行配置。

    3、确保Xcode许可协议是已经通过授权的

    如果没有授权,可以通过一行命令来进行授权:sudo xcodebuild -license,如下图所示,授权完成根据提示按q退出即可:

    4、设置iOS模拟器

    通过命令:open -a Simulator

    五、创建运行一个简单的Flutter项目

    1、创建项目

    通过命令:flutter create 项目名 来创建一个Flutter项目,如下图我在桌面的FlutterProject文件夹中创建了一个flutter_app的项目

    2、查看项目目录

    我们进入到项目中,查看里面都有哪些文件?

    android、ios分别是flutter_app这个项目的安卓和iOS的宿主工程,pubspec.yaml是这个项目flutter依赖包配置的文件,lib是dart部分的代码,里面默认有一个main.dart可以直接运行的。

    3、运行项目

    同样的有两种方式,先来说第一种,可以直接通过命令行的方式运行,到项目的根目录下,然后通过命令:flutter run 即可运行项目;第二种通过Xcode工具打开项目的ios宿主工程,然后点击运行按钮也可以运行我们的项目,结果如图所示:

                      

    五、安卓开发环境配置

    1、安装JDK

    我想目前了解Flutter比较多的还是安卓从业者,所以相信大家对于安卓的开发环境都是很熟悉的,所以这里说的可能会快一点。首先需要安装的是JDK,可以到Oracle官网上下载,最简单的直接百度JDK下载就行了,我目前使用的是JDK1.8,下载完成之后,大家需要配置一下环境变量,这个网上有很多相关教程,大家可以自行查找:

    2、安装AndroidStudio

    这里给大家分享一个我常用的工具下载的网站,关于安卓的一切你都可以在里面找到:https://www.androiddevtools.cn/,下载你需要的AS版本的安装包解压按步骤安装即可,没什么复杂的步骤。

    3、安装Flutter插件和Dart插件

    打开AndroidStudio,在工具栏找到Plugins,然后搜索Flutter和Dart安装重启AndroidStudio即可:

    4、打开运行Flutter项目

    如果需要新建项目我们只需要start a new flutter project即可,按照步骤一步一步新建一个Flutter项目,如下图所示:

    因为我们已经创建好了一个项目,所以我们直接打开刚刚创建的flutter_app,然后选择需要运行的模拟器或者真机,选择main.dart文件,点击运行按钮即可运行我们的项目:

    写到这里,其实关于环境配置这块基本上就说的差不多了,因为毕竟这是一个全新的东西,所以还有很多未知需要我们去发掘,这里也只是学习了一下最先导的配置环境,工欲善其事必先利其器,准备工作做好了,才能开心的撸代码啊!

    最后把Android和iOS两个平台的运行效果都贴一下吧,算是个结语啦,我也是个新手有什么不对的,欢迎留言探讨!

    如下左侧是Android平台,右侧是iOS平台:

    展开全文
  • Flutter开发环境搭建(Windows环境下)

    万次阅读 2018-10-10 10:59:25
    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。这是在 Flutter 中文网看到的对 Flutter 的介绍 前期准备 使用镜像 由于在国内访问Flutter有时...

    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。这是在 Flutter 中文网看到的对 Flutter 的介绍

    前期准备

    使用镜像

    由于在国内访问Flutter有时可能会受到限制,Flutter官方为中国开发者搭建了临时镜像,大家可以将如下环境变量加入到用户环境变量中,

    export PUB_HOSTED_URL=https://pub.flutter-io.cn
    export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
    

    如图:

    配置环境变量1

    配置环境变量2
    提前设置这两个环境变量会避免不必要的错误,我之前没配这连个环境变量,在执行 flutter doctor 命令的时候出现了 无法连接到远程服务器 的错误。

    系统要求

    要安装并运行Flutter,您的开发环境必须满足以下最低要求:

    • 操作系统: Windows 7 或更高版本 (64-bit)

    • 磁盘空间: 400 MB (不包括Android Studio的磁盘空间).

    • 工具: Flutter 依赖下面这些命令行工具.

      • Git for Windows (Git命令行工具)

        如果已安装Git for Windows,请确保命令提示符或PowerShell中运行 git 命令

    安装过程

    下载Flutter SDK

    这里我通过 git 命令来下载 Flutter 的 beta 版.

    git clone -b beta https://github.com/flutter/flutter.git

    下载 Flutter SDK

    下载可能有点慢,耐心等待。

    配置环境变量

    下载完成后,将 flutter 添加到“用户变量”Path”的条目下。 Path 路径:控制面板 -> 系统和安全 -> 系统 -> 高级系统设置 -> 环境变量,Path 变量中添加 Flutter 路径,到 \bin 级;如图:

    配置环境变量

    运行 flutter doctor

    配置好环境变量后,打开一个新的命令提示符运行以下命令以查看是否需要安装任何依赖项来完成安装

     flutter doctor
    

    如图:

    在这里插入图片描述

    该命令检查您的环境并在终端窗口中显示报告。Dart SDK已经在捆绑在Flutter里了,没有必要单独安装Dart。

    重新运行该命令即可看到以下信息,如图:

    在这里插入图片描述

    电脑连接手机,打开开发者模式,打开 cmd -> flutter devices,检测是否连接设备,如图:

    在这里插入图片描述

    参考

    flutter中文网(https://flutterchina.club/)

    结束语

    学习一样新的东西,尤其是技术方面的东西,先找个看上去靠谱的教程一步步来,将这个过程中出现的问题和自己的疑惑点记录下来,不要着急马上找到答案,先实现最终效果。

    给我自己一个小任务,年底前至少写 6 篇在学习 flutter 中的总结。

    大家有兴趣的话可以关注下我的公众号
    在这里插入图片描述

    展开全文
  • Flutter插件开发

    千次阅读 2019-04-16 07:58:48
    使用Flutter进行应用开发时,为实现一些功能(比如WebView加载网页、实现视频控件等)我们会引入三方插件,这些插件我们都可以在https://pub.dartlang.org/flutter网站中进行查找,然后在flutter工程中配置pubspec....

    前言

    使用Flutter进行应用开发时,为实现一些功能(比如WebView加载网页、实现视频控件等)我们会引入三方插件,这些插件我们都可以在https://pub.dartlang.org/flutter网站中进行查找,然后在flutter工程中配置pubspec.yaml文件来引入。那么,如果我们需要实现的功能对应的插件在该网站上没有怎么办呢,这时候就需要我们自己来开发特定的插件了。本篇我们就来介绍一下如何开发自己的插件和如何在项目中使用。

    开发Flutter插件

    创建插件项目

    首先,我们创建一个指定文件夹demo_0414,然后在终端命令行中该文件夹下使用以下flutter命令根据插件模板创建一个插件项目

    flutter create -t plugin flutter_plugin_demo
    

    执行完成后,会在demo_0414目录下生成一个flutter plugin项目,使用Android Studio打开项目目录结构如下

    目录结构中我们可以看到比平常创建的flutter项目多了一个example目录,这个就是对应插件的例子工程,它是一个flutter application项目,当我们插件项目的功能开发完成后,可以通过example工程写一些plugin api的具体使用实例,以便发布后读者通过example能够更快速的学习该插件的使用方法。

    我们看到插件项目的lib目录下有一个模板生成的dart文件,该文件包含的FlutterPluginDemo就是一个插件类,其内部实现了一个获取平台系统版本的方法,该方法是通过实现的Platform Channel来获取版本号信息的,我们查看插件工程内的android和ios目录中确实有对应的Platform Channel实现。

    插件功能开发

    创建好的插件项目中已经为我们实现好了一个获取平台系统版本号的插件类,那么,我们如果想实现自己所需要的功能该如何编写对应的代码呢?

    安卓平台代码添加

    在添加安卓平台代码之前,需要确保插件代码通过example工程被构建过一次(这很重要),可以执行以下命令进行构建

    //首先执行
    cd flutter_plugin_demo/example/
    
    //然后执行
    flutter build apk
    

    example工程中构建安卓apk包完成后,可以通过Android Studio打开example项目中的安卓工程,编辑器中的项目结构如下

    我们可以看到以android项目目录结构展示插件对应的java类代码位于flutter_plugin_demo/java/com.example.flutter_plugin_demo/目录下,此时我们就可以编辑该类文件添加插件功能了。

    iOS平台代码添加

    在添加iOS平台代码之前,同安卓一样,也要确保插件代码通过example工程被构建过一次,可以执行以下命令进行构建

    //首先执行
    cd flutter_plugin_demo/example/
    
    //然后执行
    flutter build ios --no-codesign
    

    构建完成后,我们可以使用Xcode打开example工程中iOS项目,找到ios目录下的Runner.xcworkspace并打开,编辑器中的项目结构如下

    我们可以看到插件代码位于Pods/Development Pods/flutter_plugin_demo/../../example/ios/.symlinks/plugins/目录下,此时我们就可以编辑FlutterPluginDemoPlugin类来添加插件功能了。

    dart api代码添加

    dart api代码添加就简单多了,直接在插件项目的lib下的dart文件中添加即可

    插件的使用

    自有插件开发完成后如何使用呢,有三种引用方式

    1. 将插件发布到pub上,就可以使用常规的引用方式(发布pub上即公开,大家都可以使用,如果是私有的不要这样做);
    dependencies:
      dio: 2.1.x
    
    1. 将插件工程上传到git库上,可以通过指定git地址的方式引用;
    dependencies:
      dio:
        git:
          url: git://github.com/flutterchina/dio.git
    
    1. 可以通过相对路径的方式引入本地插件;
    // 比如example工程中的pubspec.yaml中引入我们的demo插件的方式
    dependencies:
      flutter_plugin_demo:
        path: ../
        
    // 如果创建一个与插件目录平级目录的flutter项目,引入插件则在pubspec.yaml中配置
    dependencies:
      flutter_plugin_demo:
        path: ../flutter_plugin_demo
    

    插件引入之后,我们就可以在自己的flutter项目中通过dart api使用插件开发的功能了。

    总结

    Flutter plugin的开发流程其实挺简单,一定要注意添加插件代码之前要使用example工程对平台代码构建一次,这样才会在example工程目录中正常显示插件文件以供编辑。

    通过以上步骤即可完成flutter插件项目的创建和插件功能的添加,如果插件功能实现时需要依赖三方插件,那么插件项目中同样可以通过pubspec.yaml引入三方插件。后续我们在开发分享功能时如果找不到实现好的分享插件,自己就可以来实现了,如果你想公开供大家使用还可以发布到pub上分享出来。

    说明:

    文章转载自对应的“Flutter编程指南”微信公众号,更多Flutter相关技术文章打开微信扫描二维码关注微信公众号获取。

    展开全文
  • Flutter开发三 浅谈Flutter UI布局

    万次阅读 2018-11-18 20:39:35
    对于一个应用来说,开发UI界面是很基础的一个工作。Flutter中的布局是直接写在代码中的,没有像Android一样使用xml来布局,这一点与RN中使用jsx来布局类似,它遵循的也是一切都是widget的思想。因此Flutter 中UI界面...

    1 Flutter布局浅述

    对于一个应用来说,开发UI界面是很基础的一个工作。Flutter中的布局是直接写在代码中的,没有像Android一样使用xml来布局,这一点与RN中使用jsx来布局类似,它遵循的也是一切都是widget的思想。因此Flutter 中UI界面的布局就是组合各种widget的过程。我们可以参考下面的一段话

        In Android, the View is the foundation of everything that shows up on the screen. Buttons, toolbars, and inputs, everything is a View. In Flutter, the rough equivalent to a View is a Widget. Widgets don’t map exactly to Android views, but while you’re getting acquainted with how Flutter works you can think of them as “the way you declare and construct UI”.
    

    大意是在Android中,View是屏幕上显示的所有内容的基础, 按钮、工具栏、输入框等一切都是View。 在Flutter中,View相当于是Widget。所以在Android中我们把所有的UI元素都看成View,在Flutter中widget就类似于View

    与Android不同的是,Flutter提供的widget是在是太多了,对于相同的UI界面也可以使用不同的widget来实现,不过在Flutter中有一个原则,那就是尽量使用轻量级的widget来实现

    关于如何在Flutter中进行布局,我们还是来参考官方的例子吧
    https://flutter.io/docs/development/ui/layout
    在这里插入图片描述
    打开这个例子可以看到Flutter如何教我们布局,下面大体说以下步骤

    2 布局拆分

    第一步是将布局拆分成基本的元素:
    找出行和列.
    布局包含网格吗?
    有重叠的元素吗?
    是否需要选项卡?
    注意需要对齐、填充和边框的区域.

    首先,确定更大的元素。在这个例子中,四个元素排列成一列:一个图像,两个行和一个文本块
    在这里插入图片描述

    其实这个和Android中的布局类似,如上的布局,在Android中我们也会采用一个线性布局,child分别是imageview,线性布局 线性布局 TextView。

    3 确定根布局

    由于我们一般会遵循MD设计,因此可以先写出如下的根布局

    class MyApp extends StatelessWidget {
    
      @override
      Widget build(BuildContext context) {
        
        // TODO: implement build
        return MaterialApp(
          title: "Flutter Layout Demo",
          home: Scaffold(
            appBar: AppBar(
              centerTitle: true,
              title: Text("Flutter Layout Demo"),
            ),
            body: ,
          ),
        );
      }
    }
    

    下面开始布局body部分了,body部分我们可以采用一个Column或者ListView,官方是ListView 可能主要是怕屏幕空间不够吧。

    4 布局Image

    我们还是按照官方的布局来。首先布局ImageView

    body: ListView(
              children: <Widget>[
                Image.asset(
                  "assets/images/lake.jpg",
                  height: 240.0,
                  fit: BoxFit.cover,
                ),
              ],
            ),
    

    这里首先把lake.jpg拷贝到工程的assets/images目录下,并且在pubspec.yaml 文件中修改如下

      assets:
        - assets/images/lake.jpg
    

    运行Demo,我们的效果如下:
    在这里插入图片描述

    5 布局标题行

    看下图的标题行
    在这里插入图片描述
    可以看到,首先是一个Row widget,它有三个child一列文字,一个星形图标和一个数字,第一个child是一个Column布局,有两个child,包含2行文字
    另外,第一列占用大量空间,所以它必须包装在Expanded widget中。
    因此布局如下:

    Widget titleSection = Container(
          padding: EdgeInsets.all(32.0),
          child: Row(
            //3个child 水平排列
            children: <Widget>[
              //占满剩余空间
              Expanded(
                // 2 个child竖直排列
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Container(
                      padding: EdgeInsets.only(bottom: 8.0),
                      child: Text(
                        "Oeschinen Lake Campground",
                        style: TextStyle(fontWeight: FontWeight.bold),
                      ),
                    ),
                    Text(
                      "Kandersteg, Switzerland",
                      style: TextStyle(color: Colors.grey[500]),
                    )
                  ],
                ),
              ),
    
              Icon(
                Icons.star,
                color: Colors.red[500],
              ),
    
              Text("41"),
            ],
          ),
        );
    

    接着,修改我们的ListView如下:

    // TODO: implement build
        return MaterialApp(
          title: "Flutter Layout Demo",
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            appBar: AppBar(
              centerTitle: true,
              title: Text("Flutter Layout Demo"),
            ),
            body: ListView(
              children: <Widget>[
                Image.asset(
                  "assets/images/lake.jpg",
                  height: 240.0,
                  fit: BoxFit.cover,
                ),
                titleSection,
              ],
            ),
          ),
        );
    

    运行效果如下:
    在这里插入图片描述

    6 实现Button布局

    对于Button布局,可以看出这首先是一个Row布局,然后有三个child
    在这里插入图片描述

    这里我们参考官方的例子,写出一个函数来创建布局

      /// 构建button
      Column _buildButtonColumn(BuildContext context, IconData icon, String label) {
        Color color = Theme.of(context).primaryColor;
    
        return Column(
          mainAxisSize: MainAxisSize.min,
          mainAxisAlignment: MainAxisAlignment.center,
          //列布局
          children: <Widget>[
            Icon(
              icon,
              color: color,
            ),
            Container(
              margin: EdgeInsets.only(top: 8.0),
              child: Text(
                label,
                style: TextStyle(
                  fontSize: 12.0,
                  fontWeight: FontWeight.w400,
                  color: color,
                ),
              ),
            )
          ],
        );
      }
    

    函数调用如下:

        Widget buttonSection = Container(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: <Widget>[
              _buildButtonColumn(context, Icons.call, "Call"),
              _buildButtonColumn(context, Icons.near_me, "Route"),
              _buildButtonColumn(context, Icons.share, "Share"),
            ],
          ),
        );
    

    需要说明一下的是官方主轴方向通过 MainAxisAlignment.spaceEvenly 平均的分配每个列占据的行空间,我这里是MainAxisAlignment.spaceAround,注意这二者之间的细微差别。最后运行效果如下:
    在这里插入图片描述

    7 布局Text文本

    关于Text文本的布局就很简单了,这里不再细说了,可以参考官方例子。下面看一下完成后的例子
    代码

    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
    
      var text =  '''
    Lake Oeschinen lies at the foot of the Blüemlisalp in the Bernese Alps. Situated 1,578 meters above sea level, it is one of the larger Alpine Lakes. A gondola ride from Kandersteg, followed by a half-hour walk through pastures and pine forest, leads you to the lake, which warms to 20 degrees Celsius in the summer. Activities enjoyed here include rowing, and riding the summer toboggan run.
            ''';
    
      @override
      Widget build(BuildContext context) {
        Widget titleSection = Container(
          padding: EdgeInsets.all(32.0),
          child: Row(
            //3个child 水平排列
            children: <Widget>[
              //占满剩余空间
              Expanded(
                // 2 个child竖直排列
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Container(
                      padding: EdgeInsets.only(bottom: 8.0),
                      child: Text(
                        "Oeschinen Lake Campground",
                        style: TextStyle(fontWeight: FontWeight.bold),
                      ),
                    ),
                    Text(
                      "Kandersteg, Switzerland",
                      style: TextStyle(color: Colors.grey[500]),
                    )
                  ],
                ),
              ),
    
              Icon(
                Icons.star,
                color: Colors.red[500],
              ),
    
              Text("41"),
            ],
          ),
        );
    
        Widget buttonSection = Container(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: <Widget>[
              _buildButtonColumn(context, Icons.call, "Call"),
              _buildButtonColumn(context, Icons.near_me, "Route"),
              _buildButtonColumn(context, Icons.share, "Share"),
            ],
          ),
        );
    
        Widget textSection = Container(
          padding: EdgeInsets.all(32.0),
          child: Text(
            text,
            softWrap: true,
          ),
        );
    
        // TODO: implement build
        return MaterialApp(
          title: "Flutter Layout Demo",
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            appBar: AppBar(
              centerTitle: true,
              title: Text("Flutter Layout Demo"),
            ),
            body: ListView(
              children: <Widget>[
                Image.asset(
                  "assets/images/lake.jpg",
                  height: 240.0,
                  fit: BoxFit.cover,
                ),
                titleSection,
                buttonSection,
                textSection,
    
              ],
            ),
          ),
        );
      }
    
      /// 构建button
      Column _buildButtonColumn(BuildContext context, IconData icon, String label) {
        Color color = Theme.of(context).primaryColor;
    
        return Column(
          mainAxisSize: MainAxisSize.min,
          mainAxisAlignment: MainAxisAlignment.center,
          //列布局
          children: <Widget>[
            Icon(
              icon,
              color: color,
            ),
            Container(
              margin: EdgeInsets.only(top: 8.0),
              child: Text(
                label,
                style: TextStyle(
                  fontSize: 12.0,
                  fontWeight: FontWeight.w400,
                  color: color,
                ),
              ),
            )
          ],
        );
      }
    }
    

    运行效果
    在这里插入图片描述

    8 Flutter布局总结

    1 Flutter的布局一切都是widget,布局过程就是widget的组合
    2 Flutter布局中需要清楚的划分Row Column Stack ListView GridView等
    3 布局过程中的margin padding等可考虑使用Container
    4 对于有状态的Widget需要使用StatefulWidget子类来实现
    5 对于同一布局能用多种不同的widget来实现的,尽量使用轻量级的widget

    参考 https://flutter.io/docs/development/ui/layout

    展开全文
  • Flutter开发环境搭建和调试

    千次阅读 2019-08-09 20:32:02
    Flutter开发环境搭建和调试开发环境的搭建1. 下载Flutter SDK2. 配置环境变量3.安装Visual Studio Code所需插件4.创建Flutter项目模拟器的安装与调试 Flutter开发工具很多,有很多支持Flutter开发的IDE。比如...
  • 它的最终目标是替代包含几乎所有平台的开发:iOS,Android,Web,桌面;做到了一次编写,多处运行。掌握Flutter web可能是Web前端开发者翻盘的唯一机会。 在前些日子举办的Google IO 2019 年度开发者大会...
  • 如何使用Flutter开发web应用

    万次阅读 2019-08-15 20:54:33
    前言:Flutter系列的文章我应该会持续更新,从User Interface(UI)到数据相关(文件、数据库、网络)再到Flutter进阶(平台特定代码编写、测试、插件开发等),欢迎感兴趣的读者持续关注(可以扫描左边栏二维码或者...
  • Flutter TV应用的开发尝试

    千次阅读 2019-08-09 20:31:17
    Flutter主要是进行移动应用开发外,最近尝试了下Flutter开发TV应用。虽然写出来了,效果也还可以,体验流畅,自动适配。不过开发成本还是挺高的,按键监听、焦点处理和焦点框处理比较麻烦,由于Google官方并没有...
  • Flutter基础—开发环境与入门

    万次阅读 热门讨论 2018-03-01 14:18:22
    Flutter开发环境的前提要求如下: Windows 7以上版本(64位)、Mac或Linux操作系统(64位) 磁盘空间:400 MB(不包括Android Studio的磁盘空间)。 已经安装及配置Git Mac开发环境 Flutter SDK Dart ...
  • flutter开发

    2018-05-18 14:53:59
    撸代码 ...flutter是一个跨平台的移动开发框架,使用Dart语言,他的目的时创建一个高性能,高稳定性,高帧率,低延迟的安卓和ios移动应用。并且有原生的应用一样的体验。 核心 其中框架有函数...
  • Flutter 开发规范

    千次阅读 2020-02-05 09:55:03
    学习 Flutter 同样建议大家先了解掌握其开发规范,大致包括:项目结构规范、命名规范、缩进格式规范、注释规范、代码规范、其他规范。良好的开发规范不但能提升自己的编程水平及能力,有利于提升自己的开发效率,也...
  • 为大家倾力打造的课程《Flutter从入门到进阶-实战携程网App》上线了,解锁Flutter开发新姿势,一网打尽Flutter核心技术 点我Get!!! 在这篇文章中,将带着大家一起在Mac平台上快速搭建Flutter的开发环境,同时会...
  • 等待完成。。。。
  • 安装Flutter ...搭建Flutter开发环境 由于Flutter会同时构建Android和IOS两个平台的发布包,所以Flutter同时依赖Android SDK和iOS SDK,在安装Flutter时也需要安装响应平台的构建工具和SDK。下面我们...
  • Flutter开发之插件入门(免费课程)

    千次阅读 2019-04-08 22:13:23
    本课程一步步带领大家学习Flutter插件开发相关知识。 开发语言: 上层:Dart Android: Java iOS: OC 课程涉及Dart Java OC三门语言 课程收益 深入理解Flutter插件通讯原理 学习如何上下层传递参数 学习如何事件派发及...
  • 超级详细flutter开发环境搭建

    千次阅读 2020-02-21 11:11:41
    一、在Windows上搭建Flutter开发环境 系统要求 要安装和运行Flutter,您的开发环境必须满足以下最低要求: 操作系统Windows 7 SP1或更高版本(64位) 磁盘空间::400 MB(不包括IDE/Tools的磁盘空间)。 工具颤振取...
  • Flutter开发简介与其他的混合开发的对比为什么要使用Flutter?跨平台技术简介Hybrid技术简介QT简介Flutter简介 为什么要使用Flutter? Flutter有什么优势?它可以帮助你: 提高开发效率 同一份代码开发iOS和Android 用...
  • Flutter开发系列教程

    千次阅读 2018-10-25 18:15:38
    不定期分享Flutter开发资讯与教程 文章地址https://github.com/flyou/flutter_demo 本人时间有限,并不能保证定期更新,但是不定期更新是肯定的。 能力有限,也不能保证写的都是对的,如有错误,请海涵指正。 文章...
  • 搭建基于Visual Studio Code(VsCode)的Flutter开发环境. 目标用户: Flutter初学者 操作步骤 一、下载并安装Visual Studio Code https://code.visualstudio.com/Download 预计耗时:3分钟(按照500k/秒下载速度估计) ...
  • Flutter开发App简介

    2020-05-23 13:50:22
    简介 今天给大家介绍的是Dart2和Flutter ...Flutter是google推出的跨平台开发框架, 类似于React-native. 不过相比于React-native, 它的性能更有优势. 支持IOS,Android •谷歌的开源移动UI框架 •支持iOS..
1 2 3 4 5 ... 20
收藏数 21,623
精华内容 8,649
关键字:

flutter开发