flutter_flutter- - CSDN
flutter 订阅
Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。Flutter 开源、免费,拥有宽松的开源协议,适合商业项目。 展开全文
Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。Flutter 开源、免费,拥有宽松的开源协议,适合商业项目。
信息
推出时间
2015年5月3日 [2]
外文名
Flutter [1]
Flutter框架概况
Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台 [3]  。Flutter 可以方便的加入现有的工程中。在全世界,Flutter 正在被越来越多的开发者和组织使用,并且 Flutter是完全免费、开源的。它也是构建未来的 Google Fuchsia 应用的主要方式。Flutter 组件采用现代响应式框架构建,这是从React中获得的灵感,中心思想是用组件(widget)构建你的UI。 组件描述了在给定其当前配置和状态时他们显示的样子。当组件状态改变,组件会重构它的描述(description),Flutter 会对比之前的描述, 以确定底层渲染树从当前状态转换到下一个状态所需要的最小更改。
收起全文
  • 从简到难,从浅入深,逐步带领大家了解Flutter,熟悉Flutter的组成部分,并且带领大家学习如何使用Flutter实现UI功能编写。通过对本视频的学习,你将会掌握Flutter常用组件和常用布局构建复杂布局、Flutter路由导航...
  • flutter基础教程

    2020-05-08 15:32:59
    Flutter基础入门视频教程,Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。通过这门课程的学习使得大家掌握使用flutter来编写跨平台移动客户端应用。
  • * flutter 中 Scaffold 使用精讲* flutter 中 Text 使用精讲* flutter 中 TextField 使用精讲* flutter 中 button 使用精讲* flutter 中 Row 使用精讲* flutter 中 Column 使用精讲* flutter 中 ...
  • Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的用户界面。本课程以实战案例的方式带领大家编写Flutter女装商城案例。 案例中使用了真实的开发接口,采用工程化开发标准开发。
  • 谷歌——Flutter

    2018-08-10 08:47:51
    Flutter——谷歌开源的跨平台UI开发框架 Fluter特性介绍 Flutter官网介绍如下: Flutter is Google’s mobile UI framework for crafting high-quality native interfaces on iOS and Android in record time. ...

    Flutter——谷歌开源的跨平台UI开发框架

    Fluter特性介绍

    Flutter官网介绍如下:

    Flutter is Google’s mobile UI framework for crafting high-quality native interfaces on iOS and Android in record time. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source.

    这个说明告诉我们:Flutter是一款UI框架,可以制作跨平台(Android、IOS)的,高速的本地界面(不是H5)。Flutter可以跟现有的代码一起工作,并且可以被世界各地开发者使用,因为他是免费的、开源的! 

    学习这个跨平台的UI框架,也许有一天你能成为一个Android、IOS双端开发者,或者成为谷歌新系统Fuchsia开发者!不管怎么样,会让你的技能池更加丰富,让你变的更强大!

    拥抱变化,才能把握机会!不学习就落后,落后就挨打!


    我们已经知道Flutter是什么了,那么它有哪些特点呢? 它能做什么呢?

    • Fast development(快速开发)

    Flutter’s hot reload helps you quickly and easily experiment, build UIs, add features, and fix bugs faster. Experience sub-second reload times, without losing state, on emulators, simulators, and hardware for iOS and Android.

    Flutter的热加载可以帮助你快速简单的尝试,构建UI,添加功能或者快速的修复BUG。你可以在任何具备IOS或Android的硬件的模拟器上体验不要一秒的重载时间,并且不会丢失任何状态! 
    这里写图片描述

    • Expressive, beautiful UIs(漂亮的UI)

    Delight your users with Flutter’s built-in beautiful Material Design and Cupertino (iOS-flavor) widgets, rich motion APIs, smooth natural scrolling, and platform awareness.

    你的用户会感到高兴,因为Flutter内置的Material Design设计和Cupertino (iOS-flavor)控件,拥有丰富的api,能平滑滚动,并能保留了平台的特性

    这里写图片描述 这里写图片描述

     

    •  
    • Modern, reactive framework(时髦而高效) 

     

    Easily compose your UI with Flutter’s modern reactive framework and rich set of platform, layout, and foundation widgets. Solve your tough UI challenges with powerful and flexible APIs for 2D, animation, gestures, effects, and more. 
    Flutter是个时髦而高效的UI框架,它有丰富的平台特性,布局,基础控件。它的2D,动画,手势,感应等强大的API,灵活使用,能解决你头疼的UI问题!

    
     
    1. //官方示例代码

    2. class CounterState extends State<Counter> {

    3. int counter = 0;

    4.  
    5. void increment() {

    6. // Tells the Flutter framework that state has changed,

    7. // so the framework can run build() and update the display.

    8. setState(() {

    9. counter++;

    10. });

    11. }

    12.  
    13. Widget build(BuildContext context) {

    14. // This method is rerun every time setState is called.

    15. // The Flutter framework has been optimized to make rerunning

    16. // build methods fast, so that you can just rebuild anything that

    17. // needs updating rather than having to individually change

    18. // instances of widgets.

    19. return new Row(

    20. children: <Widget>[

    21. new RaisedButton(

    22. onPressed: increment,

    23. child: new Text('Increment'),

    24. ),

    25. new Text('Count: $counter'),

    26. ],

    27. );

    28. }

    29. }

    • Unified app development

    Flutter has the tools and libraries to help you easily bring your ideas to life on iOS and Android. If you don’t have any mobile development experience, Flutter is an easy and fast way to build beautiful mobile apps. If you are an experienced iOS or Android developer, you can use Flutter for your views and leverage much of your existing Java/ObjC/Swift investment.

    Flutter 的工具和库,可以帮助你在IOS和Android上轻松实现生活上的想法。如果你没有任何移动开发经验,你可以学习Flutter来简单、快捷的构建漂亮的移动端应用程序。如果你是一个有经验的iOS和Android开发人员,您可以使用Flutter利用你现有的代码(Java,ObJC、Swift)进行开发!

    很厉害!为了让你好好使用这个框架,谷歌兼容了你现有的代码 

    想详细了解Flutter的特性你可以去官网逛逛 

    看了Fluter的特性之后,你是否对Flutter已经感兴趣?是否跃跃欲试!是的话请您继续看,我们开始配置环境!


    Fluter环境配置

    1、系统配置

    • Windows 7 及以上并且 64位
    • 除了Android Studio占用的空间,硬盘剩余空间必须大于40MB
    • Flutter依赖命令行工具,所以你必须有GIT环境,并且有GIT命令面板可以使用

    2、获取Flutter SDK

    打开你的GIT命令面板,输入:

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

    通过镜像获取SDK 
    获取成功之后,需要配置环境变量,只需要把flutter\bin 加入到path路径当中即可(请复制完整的路径) 
    然后在CMD命令中输入

    flutter doctor
    • 1

    检查你的依赖是否已经下载成功。

    • 这个命令不能在第三方的命令控制面板(shell)比如GIT上输入,请使用电脑自带的CMD面板

    • 如果显示命令不存在,则说明环境没配置成功,需要重新配置或者重启计算机

    • 如果现实出错,别放弃,多试几次

    成功之后相关的依赖应该已经下载成功,环境配置也基本成功。Flutter支持的Android最低版本的手机是4.1,你也可通过命令查看手机是否支持

    3、设置你的手机

    • 打开手机的开发者模式,开启USB调试功能,把手机跟电脑连接

    • 输入在命令板上输入

    flutter devices
    • 1

    即可查看手机相关信息,即代表手机支持。

    • 模拟器也可以用这个命令,但是需要注意的是谷歌推荐 x86 或者 x86_64

    其实环境很好配置,下载flutter的SDK,然后加入到环境变量中即可

    以上操作已经完成,我们可以设置我们的IDE了

    设置Flutter IDE

    • 1、下载Android Studio 3.0或者更高版本,当然你也可以使用 IntelliJ:

      • IntelliJ IDEA Community, version 2017.1 or later. 
        IntelliJ IDEA Ultimate, version 2017.1 or later.
    • 下载Flutter 和Dart插件

    Flutter用于开发者的工作,比如编译调试等。Dart用于编码,解析 
    下载步骤:(1)打开Android Stsudio (2)打开插件设置(Preferences>Plugins) (3)选择Browse repositories,然后选择Flutter,点击下载(4)提示下载Dart的时候选择Yes(5)重启IDE

    Hellord

    创建一个新的Flutter的应用,运行,并学习如何用热重载进行更改。

    • 选择File>New Flutter Project
    • 选择项目类型为Fluter应用,下一步
    • 输入项目名称,并下一步
    • 点击finish
    • 等待Android Studio下载SDK,并创建项目

    * 一般创建的app是使用的Material组建*

    **在你的项目中,你的app的代码是lib/main.dart

    看看AndroidStudio的toolbar 
    看看AndroidStudio的toolbar,可以选择手机版本,手机型号,然后点击run,就可以把项目运行到手机上了

    然后可以试试Flutter的热重载能力:

    • 改变字符:
    
     
    1. 'You have pushed the button this many times:' to

    2. 'You have clicked the button this many times:'

    • 1
    • 2
    • 不要点击Stop,让你的app继续运行
    • 然后点击 Save All (cmd-s / ctrl-s),或者点击Reload按钮我们立刻就可以看到内容改变,非常方便高效

    基于以上,我们已经了解了Flutter是什么,它的特性,以及环境配置和简单的尝试

    下一次内容我们会分享如何构建一个Flutter APP

    当然你也可以访问官网查看学习资料进行学习:官网

    展开全文
  • Flutter 是什么? Flutter 是来自谷歌的一个出色的跨平台框架,可用来为移动、桌面和 Web 平台构建应用程序。它于 2018 年 12 月正式发布,仅用了不到一年的时间就在 GitHub 和 StackOverflow 上获得了比 React ...

    Flutter 是什么?

    Flutter 是来自谷歌的一个出色的跨平台框架,可用来为移动、桌面和 Web 平台构建应用程序。它于 2018 年 12 月正式发布,仅用了不到一年的时间就在 GitHub 和 StackOverflow 上获得了比 React Native 更高的知名度。所有这些热度背后都是有一个很好的理由来支撑的,这篇文章就会具体解释这个原因。

    为什么又要出一个框架?

    当我向软件产业的从业者介绍 Flutter 时,他们通常会问我的第一个问题是“为什么有人会用它,而不是 React Native 或者其他 SDK 呢?”答案很简单:它在所有方面都比其他任何竞争者都更加出色。当然人们想要听更详细的解释,这是很自然的事情。

    除非有人找出了更好的方法,否则我们往往看不到自己手头工具和资源的局限;即便有人拿出了更好的选择,我们自己的偏见和先入为主的观念也可能让我们难以摆脱“旧路子”,很难去拥抱更强大、更灵活的事物。软件这个领域中也是这样的。比如说,只用过 PHP 的人们会争辩说 PHP 是如此伟大的语言,列出一二三四条理由,可他们并不了解除了简单的 Web 服务器以外,还存在着庞大的由不同设备和系统组成的生态系统。并非所有事物都是一个网站,所以我强烈支持业界使用专门为应用程序开发而打造的工具集,而不是从前端 Web 生态系统移植而来的工具。

    Flutter 的优势

    与其他选项相比,Flutter 有着一些明显的优势。这些优势融入了基础语言和 SDK 的设计中,以解决其他技术的常见问题和缺陷。想要知道你为什么要为下一个项目选择 Flutter?或者当你担任某种领导角色时,为什么应该允许开发人员使用它?下面简单分析并列出几条理由:

    1.Dart 语言

    很多语言都在标准化的泥潭中苦苦挣扎,搞出来很多不同的版本,各个版本的语言特性也各自不同(许多开发人员都分不清它们之间的区别);相比之下,Dart 语言从一开始就被设计为构建客户端应用程序的绝佳工具,并已针对 UI 开发工作做了调整和优化。这里没有互相竞争的标准,不会胡乱拼接一些本应是行业标准的语言特性,没有奇怪的语言怪癖或几十种互相之间完全不兼容的设计模式,也不需要额外堆砌一大帮本应是标准特性的功能(Redux 这个那个?)。

    Dart 有着干净且极为强大的语法,促进且鼓励了强大的应用程序架构和设计,更不用说团队一致性、标准化、长寿命、易于维护,以及许多现有的跨平台工具往往缺失的特性。它与其他流行语言(例如 C#、Java 和 TypeScript)相似,这意味着有相关经验的开发人员很容易快速上手并开始使用 Dart。

    2. 开发人员的广泛采用

    在短短的一年时间里,Flutter 在 GitHub 和 StackOverflow 上都取得了比 React Native(之前最流行的框架)更高的流行度。对你的应用程序来说,这意味着有更多的资源可供学习,可以找到更多熟练的开发人员来开发你的应用,并且技术本身的迭代速度更快(也就是说这项技术将更快地成长和成熟,不会像 React Native 那样的技术一样多年以来基本上保持不变)。

    在这里插入图片描述

    Stack Overflow Trends:Flutter与React Native的对比

    在上面这张 Stack Overflow 趋势图中,我们可以看到 Flutter 是怎样脱颖而出并取得领先地位的。这样的趋势很可能会持续下去,这意味着迟早我们会看到,愿意并能够使用其他技术来支持跨平台应用程序的开发人员逐渐变得愈加稀少了。这样的变化往往需要很长时间(许多年),但在软件开发社区中是屡次出现的情况。

    3. 它特别快

    Flutter 应用程序可编译为原生二进制文件,这些文件依赖于 C/C++ 内置的图形和渲染引擎,因此可生成非常快速且性能出众的应用程序。Flutter 应用程序能够在大多数设备上实现稳定的 60fps 输出,并在支持高刷新率的设备上实现令人难以置信的 120fps 帧率。许多开发人员已经注意到,Flutter 的性能表现与其他跨平台框架相比有了极大的提升,这也是移动应用开发人员迅速而广泛地采用这一技术的一项驱动力。确实,在性能表现和流畅的渲染方面,真正的原生构建应用是很难被击败的;但在跨平台框架领域,Flutter 在这些指标的竞争中具有明显的优势。

    4. 它相对易学

    虽然可以说并不存在哪种真正的生产级语言或工具包是真的易于学习的,但是有的语言具有清晰的文档和适用于大量用例的标准设计模式,有的语言只有参差不齐的文档,用迥异的途径来实现本该非常简单明了的任务,这些选择之间的学习难易度差异是非常大的。

    除了性能表现之外,Flutter 之所以获得如此广泛的使用率,另一大因素就是它提供的出色文档和可供参考的大批高质量示例。对于有兴趣学习新的框架、工具包或语言的开发人员来说,这一切都让 Flutter 与众不同。对于经验丰富的程序员而言这一点尤其重要,因为他们更有可能发现语言或工具包本身的设计问题。有着几十年编程经验的老手在学习某些技术文档不够完善,或缺乏基本任务演示的技术时,会很快感到沮丧头痛。Flutter 因其清晰的文档资料以及由新手和专家组成的支持社区而倍受赞誉,社区成员经常渴望分享他们的经验,并提供设计出色、开发模式出众的可靠实践示例,为他人带去福音。一般来说,易学易用,面向大众的技术往往没有那么重的精英主义氛围,所以对新人也更加友好。

    5. 它的设计精良

    Flutter 是基于出色的语言(Dart)和快速的高性能渲染引擎(Skia)从头开始设计出来的。由于选择了这样的设计路线,Flutter 就用不着花费多年时间来重走别人走过的那些坑,并且从设计之初就做出了很多优秀的决策。

    这样的路线诞生了一个高水平的框架,能鼓励不同技能水平的开发人员基于良好的设计模式和最佳实践来构建应用,而不会因为标准冲突,或糟糕的语言实践带来的内部技术债(例如糟糕的 JavaScript,大多数开发人员都会认为这是一场噩梦)而头痛不已。。拥有多年经验,能熟练跨各种设备构建应用程序的开发人员开始上手 Flutter 几分钟时间,就能意识到 Flutter 带来的明显优势;新手也不太容易陷入困境,因为互联网上有很多很棒的示例可以用来学习最佳实践。

    结论

    Flutter 是完全从新设计的,使开发人员能够在够短的时间内创建出高性能的应用程序,它避免了许多甚至难以用语言表达的问题,并提供了一个出色的开发平台,值得人们的大力赞赏。体验是很难用语言来表达的,但是我希望本文能为你提供一些见解,让你了解为什么有经验的开发人员会选择 Flutter 来轻松构建未来的项目。

    感谢你的阅读并祝你下一个项目顺利!

    文章转载于:【前端之巅】

    展开全文
  • Google不喜欢MPEG,于是推出了VP8。但打一开始他们就没在将其打造成一个真正的开放标准上做任何努力。 ...但现在只有Chrome和Google的网页应用支持,目前也没有任何迹象能成进入标准组织。... Google不喜欢所有非IE浏览器...

    Google不喜欢MPEG,于是推出了VP8。但打一开始他们就没在将其打造成一个真正的开放标准上做任何努力。
    Google不喜欢HTTP,于是推出了SPDY。但现在只有Chrome和Google的网页应用支持,目前也没有任何迹象能成进入标准组织。你可以想象微软的IE自己鼓捣了一套HTTP标准然后只和微软自己的IIS服务通讯吗?
    Google不喜欢所有非IE浏览器的NPAPI插件模型,于是推出了完全不兼容的插件API和原生代码的Native Client
    Google不喜欢JPG和PNG,于是推出了WebP图形格式
    google不喜欢原生Android 和 Ios,于是退出了Flutter 
    而现在Google又开始不喜欢Javascript了,于是推出了Dart
    估计接下来Google还会不喜欢CSS甚至是HTML。

     

    很多前端开发者应该都寻找过跨平台的App解决方案,包括没有同时独立开发iOSAndroid双端原生app的开发者,应该都接触过或者看到过Google的Flutter框架。我对于iOS原生开发与基于Vue.js的web开发比较熟悉,并在一个正在进行的蓝牙硬件项目中应用了Flutter框架,经历的漫长的适应,在本文中我将以iOS原生开发者与web开发者的视角看待Flutter框架,简单罗列Flutter的优势与缺点。

    Flutter优点

    Flutter的优点非常明显,如果你选择一个跨平台框架,与众多基于html的跨平台框架相比,Flutter绝对是体验最好,性能与构建思路几乎最接近原生开发的框架。

    • 性能强大,流畅
      Flutter对比weexreact native相比,性能的强大是有目共睹的。基于dom树渲染原生组件,很难与直接在原生视图上绘图比肩性能,Google作为一个轮子大厂,直接在两个平台上重写了各自的UIKit,对接到平台底层,减少UI层的多层转换,UI性能可以比肩原生,这个优势在滑动播放动画时尤为明显。

    • 路由设计优秀
      Flutter的路由传值非常方便,push一个路由,会返回一个Future对象(也就是Promise对象),使用await或者.then就可以在目标路由pop,回到当前页面时收到返回值。这个反向传值的设计基本是甩了微信小程序一条街了。弹出dialog等一些操作也是使用的路由方法,几乎不用担心出现传值困难

    • 单例模式
      Flutter支持单例模式,单例模式的实现也非常简单。单例模式很好的解决了一些问题。相比之下,js的单例则并不是一个真正的单例,或者说不是一个简单的单例,这也是受限于js所运行的环境。单例模式并不总是合理的,容易被滥用。但是在App的初期开发中,往往一个容易实现的单例可以帮助我们快速完成一些逻辑的搭建。

    • 优秀的动画设计
      Flutter的动画简单到不可思议,动画对象会根据屏幕刷新率每秒产生很多个(一般是60个)浮点数,只需要将一个组件属性通过补间(Tween)关联到动画对象上,Flutter会确保在每一帧渲染正确的组件,从而形成连贯的动画。这种十分暴力的操作在Flutter上却看不到明显的卡顿,这也是Flutter的一个魔力所在。相比之下其他跨平台框架几乎不能设计动画……往往会遭遇非常严重的性能问题。

    • UI跨平台稳定
      Google直接在两个平台上在底层重写了UIKit,不依赖于Css等外部解释器,几乎不存在UI表达不理想,渲染不正常的情况,可以获得非常稳定的UI表达效果。Css换个浏览器就有不同的表现,基于Css的跨平台框架很难获得稳定的UI表现。

    • 可选静态的语言,语言特性优秀
      Dart是一个静态语言,这也是相对于js的一个优势。Dart可以被编译成js,但是看起来更像java。静态语言可以避免错误,获得更多的编辑器提示词,极大的增加可维护性。很多js库也已经用ts重写了,Vue3.0的底层也将全部使用ts编写,静态语言的优势不言而喻。

    Flutter缺点

    • 假装跨平台,躲不开原生代码
      这是最大的问题,跨平台框架说白了就是UI跨平台,最后还是在原生平台运行,本来两个平台就有天壤之别,一套代码就想吃掉iOS和Android在实际应用之中其实根本就不现实。Flutter具有与原生代码互相调用的能力固然非常科学,但是问题反而显得更加明显——我一个前端工程师上哪里去知道什么是UIViewController,什么是Activity呢?我要是双端都熟悉,学习Flutter就显得很没有必要。这是一个很矛盾的点,特别是在团队里,只有几个前端突然想学Flutter,是绝对做不来大项目的,如果有原生开发者,那就没必要搞Flutter了。

    • 组合而不是继承的思路
      Flutter提倡“组合”,而不是“继承”。在iOS开发中,我们经常会继承UIView,重写UIView的某个生命周期函数,再添加一些方法和属性,来完成一个自定义的View。但是在Flutter中这些都是不可能的——属性都是final的,例如你继承了了一个Container,你是不能在它的生命周期中修改他的属性的。你始终需要嵌套组合几种Widget,例如RowContainerListViewWidget。这种方法非常不符合直觉,初学时很难想明白如何构建一个完整的组件。

    • Widget的类型难以选择
      FlutterWidget分为StatefulWidgetStatelessWidget两种,一种是带状态的一种是不带状态的,刚开发的时候很难想明白用哪个,因为StatelessWidget也能存值,其实区别就在于框架重构UI的时候会使用State来重构,如果是StatelessWidget,暂时存进去的值就没了。但是问题远不止这么简单,好在只是有点麻烦,并不影响产品性能。

    • 糟糕的UI控件API
      虽然google尽可能的让我们通过构造函数定制化Widget,但是也难免有遗漏的。例如,又一次我想修改一个Appbar的高度,居然没有找到关于高度的属性,通过阅读源码发现,高度是写死(const)的。上文已经说过,无法通过生命周期来改变组件属性,自己写Appbar显得非常没必要,毕竟我还是想使用Appbar的各种方便的功能。最后我只能把他的源码全部复制出来,直接修改高度来使用。初学框架,和一些初级开发者是不可能有迅速阅读源码的能力的(作为框架也不应该产生如此问题)。一些定制化的UI的Api设计经常有缺失,好在我已经基本习惯了。除了Appbar这种复杂的组件,自己写一个小组件也并不费事。

    • 糟糕的资源管理设计
      这里是最蠢的,Flutter支持动态加载不同分辨率的图片,但是目录设计太鬼畜了。简单的说,Sketch导出的多分辨率资源,几乎不可能直接拖到Flutter里用,极其,极其,麻烦。


    • 毕竟国情在此,要用Flutter,先买梯子。虽然有“在中国使用Flutter”指南,但是太麻烦,没梯子开发Flutter,难度系数太高了,总不能碰到每个问题都花一整天寻找替代方案吧,先买好梯子图个安心……

    总结

    Flutter主要的坑就在于需要非常了解原生的环境,其实跨平台的框架都是如此,想要通过跨平台的API就拿下双端的开发任务,对认真学习的原生开发者来说也是不公平的。
    主要的优势则在于动画流畅,很多开发者反应比原生安卓还流畅(存疑),至少在iOS上是看不到卡顿的,安卓上动画也很稳定,性能上展示了Google的硬实力



    作者:马嘉伦
    链接:https://www.jianshu.com/p/c51fc925bfd1
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • Flutter之播放视频

    2019-12-30 17:39:03
    2、Flutter状态理念认知的巩固 3、AspectRatio的简单使用 本篇博文demo的功能(demo源码点此查看): 1、加载播放视频,并且点击视频区域可以对视频start/pause 2、网络状态发生变化的时候相关处理:当是wifi状态下...

    通过本篇博文你可以了解如下知识点:
    1、VideoPlayerController播放视频的简单使用
    2、Flutter状态理念认知的巩固
    3、AspectRatio的简单使用

    本篇博文demo的功能(demo源码点此查看):
    1、加载播放视频,并且点击视频区域可以对视频start/pause
    2、网络状态发生变化的时候相关处理:当是wifi状态下直接播放视频,当断网的时候暂停视频播放,并且显示一个圆形加载框

    是的,功能很简单,但是着手写这个demo的时候倒是体会到了不少东西。闲言少叙,开车吧。

    项目需要的第三方库需要在pubspec.yaml里面配置:

    在这里插入图片描述

    • VideoPlayerController的简单说明
      VideoPlayerController顾名思义,就是对视频进行播放控制的,它提供了三个视频播放源:从网络播放,从assets文件里面播放,
      从file播放,比如本博文使用的是assets文件里的视频进行播放的,代码如下:
     //通过asset文件进行播放
      VideoPlayerController  controller=VideoPlayerController.asset(
          'videos/butterfly.mp4',
          package: 'flutter_gallery_assets',
        )
    

    如果想要播放网络视频的话就使用network方法:

      static const String beeUri = 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4';
      final VideoPlayerController beeController = VideoPlayerController.network(beeUri);
    

    在播放视频的时候需要先调用initialize()方法初始化,该方法为异步方法,返回一个Future对象。在initialize()调用之前调用play()方法是没法播放的,initialize()初始化完成后会自动播放。 那么完成了initialize之后怎么让视频渲染出来呢?就需要将controller对象交给VideoPlayer(controller) 。另外Controller对象还提供了对视频的pause()和seekTo等常规方法。

    VideoPlayerController的初始化:

    以播放assets文件夹下的视频为例,初始化播放控制器的代码如下:

    class VideoAutoPlayWhenReady extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        return _VideoState();
      }
    }
    
    class _VideoState extends State<VideoAutoPlayWhenReady> {
      VideoPlayerController controller;
      bool _isInit = false;
      _VideoState() {
        controller=VideoPlayerController.asset(
          'videos/butterfly.mp4',
          package: 'flutter_gallery_assets',
        );
        controller.setLooping(true);
        controller.setVolume(0.0);
        //还没准备好的时候没有不会播放
        controller.play();
       }
      }
    

    注意此时虽然调用了play但是是不能播放的,因为视频还没有初始化,视频的初始化放在了State对象的initState方法里:

      @override
      void initState() {
        super.initState();
        /
        controller.initialize().then((value){
            setState(() {
              _isInit = controller.value.initialized;
    
            });
        });
      }
    
      @override
      void dispose() {
        controller.dispose();
        super.dispose();
      }
    

    controller.initialize()用来初始化视频,类似于Android MediaPlayer的prepareAsync方法。初始化的过程的过程是一个异步过程,一个小细节需要注意,在页面dispose方法的时候需要调用 controller.dispose()。完成初始化可能需要耗费一定的时间,那么在这个时间端内我们肯定要展示用户展示一个提示,比如加载框的提示。所以demo中提供了如下代码来标识视频正在初始化:

    
      ///视频正在加载的界面
      Widget _buildInitingWidget(){
        return AspectRatio(
          aspectRatio: 3 / 2,
          child: Stack(
            children: <Widget>[
              VideoPlayer(controller),
              ///健在进度框
              const Center(child: CircularProgressIndicator()),
            ],
            fit: StackFit.expand,
          ),
        );
      }
    

    上述代码中使用了AspectRatio这个组件,这个组件可以某个UI展示固定的宽高比,在这里我们让视频的宽高比定义为3/2.运行效果如下:
    在这里插入图片描述
    看到没,在视频没有准备好的时候,有一个蓝色圆形的加载滚动条。当初始化完毕后就改变状态,不展示加载框就行了,核心代码如下:

    重写State的build方法:

     @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text('点击视频可暂停和播放'),
          ),
          body:  Center(
            child: _isInit? _buildPlayingWidget():_buildInitingWidget()
          ),
        );
    
      }
    

    核心主要是这句child: _isInit? _buildPlayingWidget():_buildInitingWidget()
    如果是初始化完毕,则显示播放界面,否则展示初始化的页面。如果要相应点击视频页面对视频进行暂停和播放的话,可以套一个GestureDetector组件(主要代码点此查看):

      child: GestureDetector(
              onTap: () {
                if (controller.value.isPlaying) {
                  controller.pause();
                } else {
                  controller.play();
                }
              },
              child: VideoPlayer(controller),
            ));
    

    当然,如果要考虑到监听网络变化的话而对视频进行播放暂停控制,可以参考博主的Flutter网络状态变化监听demo源码,此处不再赘述,主要方法还是build方法:

     @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text('监听网络变化'),
          ),
          body:  Center(
              child: _isInit?ConnectWidget(
                  ///wifi网络环境
                   wifiConnectWidget:PlayInWifiStatelessWidget(controller: controller,),
                   ///移动网络
                   mobileConnectWidget: PlayInMobileStatefulWidget(controller: controller,),
                   ///无网络
                   noneConnectWidget: PlayNonConnectStatelessWidget(controller: controller,)
              ):PlayNonConnectStatelessWidget(controller: controller,)
          ),
        );
    

    博客项目demo源码
    参考资料:Flutter官方视频播放资料
    Flutter网络状态变化监听

    展开全文
  • 刚开始用的OtaUpdate插件,插件内部使用downloadmanager实现的国内有很多机型不支持 思路:不想自己造轮子 使用网上现有插件 一、使用FlutterDownloader下载 二、open_file打开文件自带安装(FlutterDownloader...
  • 移动开发技术手段从原始的原生应用开发,到 Google...不过这些方案或多或少都有一些局限性和缺点,于是 Google 推出了新的跨平台移动应用开发技术:Flutter。 为什么说 Flutter 将是未来的主流跨平台开发框架? Goog...
  • 本文转载自公众号 鸿洋国内在实践Flutter以及对外分享方面,闲鱼可以说一直位于前列,不断输出了非常多的实践类文章,例如大家可以在羽雀的网站看到他们对外的Flutte...
  • 面试官:你有用过Flutter吗? Flutter架构是怎么样,为什么会比其他如ReactNative好心理分析:面试官所在的项目是用Flutter 开发的,或者正在转Flutter这种技术。如果你不会,面试官在第一眼会认为后面来应聘的人或许...
  • Flutter介绍 Flutter 是谷歌公司开发的一款开源、免费的移动 UI 框架,可以让我们快速的在 Android 和 iOS 上构建高质量 App。Flutter是完全免费、开源的。它最大的特点就是跨平台、以及高性能。 Flutter 是谷歌...
  • Flutter开发之插件入门

    2020-05-08 15:34:49
    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的用户界面。本课程一步步带领大家学习Flutter插件开发相关知识。 开发语言: 上层:Dart Android:  Java iOS: OC 课程涉及Dart Java ...
  • 不知不觉,进阶的教程已经写了几十篇了,通过前面的学习,大家已经打下了良好的基础,接下来我们就开始进行项目实战吧!...首先我们要在IntelliJ编辑器中启动一个新的Flutter项目: 启动IntelliJ IDE
  • Flutter官方介绍:大致意思这么讲:Flutter是谷歌的移动应用SDK,用于在创纪录的时间内在iOS和Android上制作高质量的原生界面。Flutter与现有代码一起使用,被世界各地的开发人员和组织使用,并且是免费和开源的。...
  • 前言: 现在的手机品牌和型号越来越多,导致我们平时写布局的时候会在个不同的移动设备上显示的效果不同, 比如我们的设计稿一个View的大小是300px,如果直接写300px,可能在当前设备显示...而flutter本身并没有适...
  • 在移动应用开发方面,Kotlin和Flutter是目前比较火热的两门技术。其中,Kotlin是由Jetbrains研发,后被Google大力扶持,Flutter则是由Google自己独立研发的。从目前Google官方的态度来看,这两门技术都被无限看好,...
  • Flutter是什么? 跨平台(Android/ios)构建移动应用程序的简单高效方式 Flutter核心只有一层轻量的C/C++代码,而上层使用了Dart语言(一种现代的、简洁的、面向对象的语言-ps:我没学直接当java来用了。。。), ...
  • 由于Flutter准备上线后需要将Flutter字符表打进崩溃系统,供崩溃系统查询。即使是发布到线上的崩溃,也能在崩溃系统中扫描出来。这里只是记录将对应Flutter版本号找到对应带符号表的过程,我们的工作就是将符号表...
1 2 3 4 5 ... 20
收藏数 49,610
精华内容 19,844
关键字:

flutter