Flutter 是移动应用程序开发的未来?

Stella981
• 阅读 285

关注“ 逆锋起笔 ”领取视频教程

☞ 程序员进阶必备资源免费送「各种技术!****」 ☜

作者 | Eric Grandt

译者 | 王艳妮,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

随着系统以及应用复杂性的日益增高,「write once,run anywhere」开始成为越来越多开发工具的终极目标。

基于此,Google 于 2017 年的 I/O 大会上隆重推出了移动 UI 框架 Flutter,可以让开发者在 iOS 和 Android 系统上快速构建高质量的原生用户界面。与此同时,苹果也于2019年 WWDC 为开发者们带来了一套可横跨苹果几大操作系统的 UI 框架 SwiftUI。

那么在此趋势下,类似 Flutter 的这种工具真的是新一代移动开发的未来吗?

Flutter 是移动应用程序开发的未来?

几年前,我在Android和iOS开发中略有涉足,使用的是Java和Objective-C。在花了大约一个月的时间学习后,我决定不再深入学习了。我就是无法找到那种深入其中的状态。

但最近,我了解了Flutter,并决定在移动应用程序开发方向上再试上一试。我当即就爱上了它,因为它使开发多平台应用程序变得贼有趣。自从了解它以来,我已经使用它创建了一个app和一个库。Flutter似乎是一个非常有前景的一步,下面我想解释一下我之所以相信这一点的几方面的原因。

1

由Dart提供技术支持

Flutter使用的是由谷歌开发的Dart语言。如果你之前使用过Java,那么会比较熟悉Dart的语法,因为它们非常相似。但除了语法之外,Dart跟Java就很不同了。

我不打算深入讨论Dart,以免跑题,但我想讨论一下我认为它最有用的功能。这个功能就是异步操作。Dart不仅支持异步操作,而且还使其变得非常容易。

如果你正在进行IO或其他耗时的操作(例如查询数据库),那么你有可能在所有Flutter应用程序中使用异步操作。如果没有异步操作,任何耗时的操作都会导致程序冻结直到此操作完成。为了防止这种情况,Dart为我们提供了async和await关键字,以允许我们的程序在等待这些较长操作完成的过程中继续往下执行。

让我们看看几个例子:一个有异步操作,一个没有。

并分别查看输出:

这不太理想。没人会想用在执行长时间操作时会卡住的App。所以让我们稍微修改一下并使用async和await关键字。

并再次输出:

有了异步操作,我们在执行需要比较久才能完成的代码的同时,其余代码的执行也不会被妨碍。

2

只写一次代码,就能同时在Android和iOS上运行

考虑到需要为Android和iOS使用不同的代码库,开发移动应用程序可能需要花费大量时间。除非您使用像Flutter这样的SDK,这样您就将拥有一个能适配两个操作系统的代码库。不仅如此,你还可以完全原生地运行它们。这意味着诸如浏览页面和导航之类的东西,完美配合不同的操作系统。

一言以蔽之,只要您有个设备或模拟器在运行着,Flutter就可以使构建和运行您的应用程序来进行测试的过程简单到动动手指就能完成。

3

UI开发

UI开发几乎是我最不期待的事情之一。我更像是一个后端开发人员,所以当涉及到严重依赖它的东西时,我只想要一些简单的东西。这就是Flutter在我眼中闪耀的地方。

UI通过将不同的小部件组合在一起并修改它们以适合你的App外观来创建。你几乎可以完全控制这些小部件的显示方式,因此你最终总是会得偿所愿。为了布局UI,可以使用诸如Row,Column和Container之类的小部件。对于内容,有诸如Text和RaisedButton之类。这只是Flutter提供的小部件中的几个,除这些之外还有很多。使用这些小部件,我们可以构建一个非常简单的UI:

Flutter 是移动应用程序开发的未来?

Flutter像一个拥有各种各样道具的魔术师,使你能轻而易举地构建App的主题。你可以通过手动更改字体,颜色,并逐个设置所有内容,但这需要太长时间了。相反,Flutter为我们提供了一个名为ThemeData的东西,它允许我们为颜色,字体,输入字段等等设值。此功能在保持应用外观的一致性方面很出色。

使用此ThemeData,我们设置应用程序颜色,字体系列和一些文本样式。除文本样式之外的所有内容都将自动应用于整个app范围。每个小部件的文本样式必须手动地一个一个设置,但这仍然很简单:

Flutter 是移动应用程序开发的未来?

为了进一步提高效率,Flutter可以热重新加载应用程序,因此您无需在每次更改UI时重新打开它。您现在可以进行更改,保存,然后在大概一秒内就能看到更改后的效果。

4

Flutter提供了许多开箱即用的强大功能,但有时你需要更多功能。考虑到Dart和Flutter的大量可用的库,这根本不是问题。是否有兴趣在你的应用中投放广告?有这方面的库。想要新的小部件吗?有这方面的库。

如果你更喜欢自己动手DIY,可以创建自己的库并马上就能与社区其他人分享。向项目添加库很简单,可以通过向pubspec.yaml文件添加一行代码来完成。例如,如果要添加sqflite库:

将它添加到文件后,运行flutter packages get,这样就好了。各种各样的库使开发Flutter应用程序变得轻而易举,并为开发过程节省了大量时间。

5

后端开发

现在大多数App都依赖于某种数据,所有这些数据需要存储在某个地方,以便以后可以显示和使用。因此,在寻找使用新SDK(例如Flutter)创建应用时,牢记这一点非常重要。

再重复一次,Flutter App是使用Dart制作的,而Dart在后端开发方面非常出色。我在本文中谈到了很多简单易行的功能,Dart和Flutter的后端开发也不例外。不管是对于初学者还是专家,创建数据驱动的App都非常简单,但这种简单性并不等同于质量底下。

可以使用库,以便你使用所选择的数据库。使用sqflite库,我们可以非常快速地启动并运行SQLite数据库。感谢单件模式,我们可以访问数据库并从几乎任何地方都可以进行查询,而无需每次都重新创建一个对象。

从数据库中检索数据后,可以使用一个模型将其转换为对象。或者,如果要将对象存储在数据库中,可以使用相同的模型将其转换为JSON。

如果没有将其显示给用户的方法,这些数据就不是那么有用了。这就是Flutter带着诸如FutureBuilder或StreamBuilder这样的小部件登场的时候了。如果您对使用Flutter,SQLite和其他技术来创建数据驱动型App有兴趣做更深一步的了解,我建议你查看我写的这方面的文章:

6

最后的一些思考

有了Flutter,就有了几乎无穷无尽的可能性,因此即使是体量巨大的App也可以轻松地被创建出来。如果你是做移动App开发的并且尚未尝试过Flutter,我强烈建议你试一下,因为我相信你也会爱上它的。使用Flutter几个月之后,我认为可以说这是移动开发的未来。如果不能算未来的话,这也绝对是朝着正确方向迈出去的一步。

原文:https://www.freecodecamp.org/news/why-i-think-flutter-is-the-future-of-mobile-app-development-768332b73c0d/

本文为 CSDN 翻译,转载请注明来源出处。

       - end -
     
       
   
      
      
            
        
    
       
       
       
       
         
     
        
        
        Flutter相关
       
         
     
        
        
        
      
        
    
       
       
       
      
        
    
       
       
       
       
         
     
        
        
        下载!闲鱼最新升级版 Flutter 技术电子书!
       
         
     
        
        
        
      
        
    
       
       
       
      
        
    
       
       
       
       
         
     
        
        
        蚂蚁金服是如何提高移动端体验的?
       
         
     
        
        
        
      
        
    
       
       
       
      
        
    
       
       
       
       
         
     
        
        
        这篇专门推荐给学 Android 的同学,建议收藏!
       
         
     
        
        
        
      
        
    
       
       
       
      
        
    
       
       
       
       
         
     
        
        
        
      
        
    
       
       
       
      
        
    
       
       
       
       
         
     
        
        
        
      
        
    
       
       
              
         
     
        
        
        
        
          
      
         
         
         关注我,获资源干货
       
         
     
        
        
        
       
         
     
        
        
        
        
          
      
         
         
         
       
         
     
        
        
                
          
      
         
         
         
         
           
       
          
          
          
        
          
      
         
         
                  
           
       
          
          
          
          
            
        
           
           
           👆关注 程序员干货
         
           
       
          
          
          
         
           
       
          
          
          
          
            
        
           
           
           
         
           
       
          
          
          
         
           
       
          
          
          
          
            
        
           
           
           点个在看,小编感恩大家❤️
         
           
       
          
          
          
   
     
 
    
    
    
  
    

   
   
   

本文分享自微信公众号 - 逆锋起笔(readdot)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
2年前
2020最新版《神经网络与深度学习》中文版 pdf 开放下载
点击上方“逆锋起笔”,关注领取视频教程☞程序员进阶必备资源免费送「各种技术!」☜(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzUyMzM2ODUwMA%3D%3D%26mid%3D2247486226%26id
可莉 可莉
2年前
2020最新版《神经网络与深度学习》中文版 pdf 开放下载
点击上方“逆锋起笔”,关注领取视频教程☞程序员进阶必备资源免费送「各种技术!」☜(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzUyMzM2ODUwMA%3D%3D%26mid%3D2247486226%26id
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这