美文网首页IT全栈圈
Flutter 开发初探

Flutter 开发初探

作者: 渝聆墨 | 来源:发表于2019-07-05 23:45 被阅读6次

导言

2018年移动开发迎来一个新的成员,那就是flutter,作为谷歌的新产品第一时间就在业界掀起一场热潮,flutter的出现让ReactNative一枝独秀的局面打破,至此Facebook宣布让ReactNative回炉重造。新技术兴起往往都会有一段市场适应期,从而来决定它是否能够存活下去,flutter就展示了他足够优秀的特点,如果还有人要问flutter是否值得去学?那就不得不说你对新技术的敏锐度还有所欠缺。

认识Flutter

学习一门新的技术,我们不能盲从,不能别人说好你就去学,关键还看你是否需要或则说有兴趣,那么需求和兴趣从什么来判断,就从市场来判断,所以在此之前不妨带着问题去一步一步地区探索flutter.

Flutter是什么?

Flutter是谷歌旗下推出的基于dart语言的移动UI框架,他可以一套代码实现IOS,Android以及Web前端页面,并且可以每秒120帧的速度持续渲染。
flutter中文网

Flutter的优点有哪些?

说到Flutter拥有哪些优点不得不把它与它前辈ReactNative对比了。
Flutter在性能上相比RN而言更加接近原生的体验,Dart是AOT编译的,编译成快速、可预测的本地代码。并且它同同样也可以多平台同时开发运行,包含Android,ios,web网页。
RN采用JavaScript语言开发,基于React.js,对前端工程师更友好。Dart语言受众小,但是dart语言曾经是宣布要取代js成为新一代的语言,不过事与愿违,但是它的写法也继承js的几乎所有优点,有前端经验的朋友可以放心食用。
Flutter自己实现了一套UI框架,丢弃了原生的UI框架。而RN还是可以自己利用原生框架,两个各有好处。Flutter的兼容性高,RN可以利用原生已有的优秀UI
在布局页面上不得不吐槽的就是Flutter的地狱式嵌套,这大概是目前Flutter的一大缺点之一吧。RN代码是JSX语法,从语言角度上看它保留了基础的js与html,css这前端三剑客的使用特点,这也是RN这么受欢迎之一,而Flutter的布局更像native布局,但是去掉xml通过代码直接写需要适应下
Flutter经过这么久的发展第三方库也层出不穷,虽然还比不上RN的生态圈,但是flutter的发展不容小视。

Flutter应该怎么去学习?

说到怎么去学一个东西,那么我们就先来看一张图:


image.png

在之前我听过一位朋友说到怎么去学习一个新的东西,接下来我把这个方法分享给各位。
第一步.花费半个小时了解所要学习的技术是什么,他有什么特点,这就是知己知彼方能百战不殆。
第二步.花费一个小时搭建好新技术的环境平台,跑一个hello world试试看。
第三步.花费一个小时到一个半小时熟悉该技术的语法规则。
第四步.花费两到三小时编写一个实际场景中demo,如简单电商操作,包含列表展示交互等。
总的花费大约在5个小时左右,我姑且把它叫做5小时学习法吧,希望对大家有用。

Flutter实战

UI视图

import 'package:flutter/material.dart';
import 'RandomWordState.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
        title: 'Welcome to Flutter',
        home: new MaterialApp(
          title: "滚动列表",
          theme: new ThemeData(primaryColor: Colors.amberAccent),
          home: new RandomWords(),
        ));
  }
}

解析:
1.flutter中程序开始都是从main函数作为程序主要入口
2.flutter导入第三方包或则内部包通用import,如果第三方包需要添加前缀package:。
3.flutter同样拥有java的一些特性包含声明关键字等,也拥有继承构造多态等特性。
4.flutter内部代码实现都是采用json数据格式来调用对象传参。
5.material.dart属于flutter内部容器组件包

网络请求
import 'dart:convert';
import 'dart:io';
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var _ipAddress = 'Unknown';

  _getIPAddress() async {
    var url = 'https://httpbin.org/ip';
    var httpClient = new HttpClient();

    String result;
    try {
      var request = await httpClient.getUrl(Uri.parse(url));
      var response = await request.close();
      if (response.statusCode == HttpStatus.OK) {
        var json = await response.transform(utf8.decoder).join();
        var data = jsonDecode(json);
        result = data['origin'];
      } else {
        result =
            'Error getting IP address:\nHttp status ${response.statusCode}';
      }
    } catch (exception) {
      result = 'Failed getting IP address';
    }

    // If the widget was removed from the tree while the message was in flight,
    // we want to discard the reply rather than calling setState to update our
    // non-existent appearance.
    if (!mounted) return;

    setState(() {
      _ipAddress = result;
    });
  }

解析:
1.flutter内部是采用HttpClient作为请求组件
2.flutter请求数据解析需要转化为json数据格式
3.flutter除去他原生自带网络请求库,同时也有第三方请求库,如dio,http等,相对于原生网络请求更加简洁。

路由跳转
import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

  final _biggerFont = const TextStyle(fontSize: 18.0);
  final _saved=new Set<WordPair>();

 Navigator.of(context).push(
      new MaterialPageRoute(
        builder: (context) {
          final tiles = _saved.map(
                (pair) {
              return new ListTile(
                title: new Text(
                  pair.asPascalCase,
                  style: _biggerFont,
                ),
              );
            },
          );
          final divided = ListTile
              .divideTiles(
            context: context,
            tiles: tiles,
          )
              .toList();
          return new Scaffold(
            appBar: new AppBar(
              title: new Text('Saved Suggestions'),
            ),
            body: new ListView(children: divided),
          );
        },
      ),
    );

解析:
1.flutter跳转页面使用Navigator.push() 方法,返回上个页面使用 Navigator.pop()
2.flutter由于是万物皆 Widget,所有跳转也是打开一个新的Widget视图。

小结

flutter的基础入门今天先讲到这里,期待往后flutter能够带来更多的惊喜。

相关文章

  • Android Flutter实践内存初探

    摘要:Android Flutter实践内存初探 闲鱼技术-匠修我们想使用Flutter来统一移动App开发并做了...

  • Flutter 开发初探

    导言 2018年移动开发迎来一个新的成员,那就是flutter,作为谷歌的新产品第一时间就在业界掀起一场热潮,fl...

  • Flutter 开发初探

    目前跨端开发比较热门的就是 React Native 和 Flutter 了,到底该选哪门技术似乎也快成了大前端圈...

  • Flutter开发-初探

    简介 Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量的原生应用...

  • Flutter - Key的原理

    前言 上篇文章我们简单探索了Flutter的渲染原理---Flutter初探渲染原理初探[https://www....

  • iOS开发初探Flutter

    一、iOS环境下安装运行 1.1、运行在模拟器 VSCode上,直接点击调试运行按钮,选择Start iOS Si...

  • Flutter 混合开发初探

    前言 Flutter是个好东西。它可以在保证高性能的前提下,实现“跨平台”和“动态化”两大移动应用难题。但是同样也...

  • Flutter优秀文章汇总_闲鱼5连,6连(更新最后一公里)

    转载 Android Flutter内存初探 Flutter是如何使用内存,又会对Native App的内存带来哪...

  • Flutter--开发体验初探

    在开始之前你需要有flutter的环境,可以参考我另一篇Flutter--macOS安装与配置进行初探的准备工作。...

  • Flutter - iOS 混合开发初探

    前言 熟悉flutter开发的人都知道,Flutter和iOS端原生混合开发的方式有两种: Flutter调用原生...

网友评论

    本文标题:Flutter 开发初探

    本文链接:https://www.haomeiwen.com/subject/cilqhctx.html