百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

为 JavaScript 开发者准备的 Flutter 指南

bigegpt 2024-09-20 14:07 4 浏览

Flutter 是一款跨平台的移动应用 SDK,可通过同一套代码构建高性能,高保真的 iOS 和 Android 应用。

文档中提到 (https://flutter.io/technical-overview/):

Flutter 包括一个 react 风格的框架 , 一个 2D 渲染引擎, 现成的组件, 和开发者工具。

希望这篇文章能够为大多数 JavaScript 开发者提供快速简便的介绍,并且我会尝试使用 Flutter / Dart 和 Pub 包来类比 JS 和 npm 生态系统。

我在 React Native 欧洲 的演讲《 React Native — Cross Platform & Beyond 》中,讨论并演示了 React 生态系统中的一些不同技术, 包括 React Native Web, React Primitives 和 ReactXP, 并且我也有机会讨论 Weex 和 Flutter。

在我过去几年看过的所有前端技术中,我在尝试了 Flutter 后最为兴奋。在这篇文章中,我将讨论为什么它令我如此激动,并介绍如何尽快开始使用它。

如果你了解我,那么我知道你在想什么…

我是一名有着超过两年半经验的 React 与 React Native 开发者。我仍然非常看好 React / React Native,并且知道许多大公司正在大规模使用它们,但我总是喜欢看到其他想法或者寻找其他方法来实现类似的目标,无论是去学习或者改变我目前的技术栈。

Flutter

我可以做个概括:Flutter 令人惊叹, 我认为它在不久的将来是一个可行的选择。

在使用了几周 Flutter SDK 之后,我正在使用它构建我的第一个应用程序,到目前为止我真的很享受这个过程。

在我开始介绍如何使用 Flutter 之前,我将首先回顾一下我对 SDK 的优缺点的看法。

优点:

  • 核心团队维护的内置 UI 库(Material,Cupertino)
  • Dart&Flutter 团队紧密合作,优化移动 Dart VM,专门满足 Flutter 的需求
  • 文档超级棒
  • 强大的 CLI
  • 我可以顺利轻松地启动和运行,而不会遇到很多障碍/错误
  • 调试体验很好,开箱即用的热重新加载以及一系列关于调试技术的文档 (https://flutter.io/debugging/)
  • 核心团队构建和维护的非常可靠的导航库
  • Dart 语言已有 6 年历史并且已经成熟。虽然 Dart 是一种基于类的面向对象编程语言,但如果你进入函数式编程,Dart 确实拥有一等公民的函数并支持许多函数式编程结构。
  • 对我来说比我预想的更容易理解
  • Dart 是一种开箱即用的强类型语言,无需任何附加配置(比如: TypeScript / Flow)
  • 如果你使用过 React,那么你可能会习惯类似的状态机制 (即生命周期方法和 setState)

缺点

  • 你需要学习 Dart (这很简单,相信我)
  • 仍在测试中(目前已经发布正式版)
  • 只针对 iOS 和 Android (目前也可用于 Web)
  • 插件生态系统还很稚嫩,截至 2017 年 9 月只有 70 多个软件包用于 Flutter (https://pub.dartlang.org/flutter)
  • 布局 / 样式需要学习全新的范例 / API
  • 要学习不同的项目配置 (pubspec.yaml vs package.json )

入门及其它观点

  • 我正在使用 VS Code 作为我的编辑器,使用 Dart Code 扩展,它可以提供非常好的开发体验。Flutter 文档强烈建议使用 IntelliJ IDE(https://www.jetbrains.com/idea/),它有一些内置的支持,如热/动态加载,而 VSCode 不具备这些功能。
  • Flutter 有一个模块系统,或者叫包管理系统 (https://pub.dartlang.org/),它与 npm 有很多不同点。它的好坏取决于你对 npm 的看法。
  • 我一开始对 Dart 一无所知,但很快就学会了。 它让我想起了 TypeScript,也和 JavaScript 有一些相似之处
  • 文档中有一些非常棒的代码实验室和教程,它们对我有很大的帮助,我建议你查看一下: 1. 构建 UIS 2. 增加 Firebase 3. 构建布局 4. 添加交互

让我们开始创建一个新的项目吧

安装 CLI (macOS)

如果你使用的是 Windows,请查阅此文档 (https://flutter.io/setup/)。如需查看完整的 macOS 平台下的安装指南,请查看此文档 (https://flutter.io/setup-macos/)。

首先,我们需要克隆包含 Flutter CLI 二进制文件的仓库,并将其添加到我们的路径中。我将这个仓库克隆到一个文件夹中,然后在$ HOME / .bashrc / $ HOME / .zshrc 文件中添加克隆目录路径。

1、克隆仓库:

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

2、添加路径:

export PATH=$HOME/bin/flutter/bin:$PATH (or whatever the path is to your installation)

3、从命令行运行 flutter doctor,以确保 flutter 路径被识别,并查看是否有任何依赖项需要安装来完成设置:

flutter doctor

安装其他依赖项

如果你想构建 iOS 应用,你必须安装 Xcode,对于构建 Android 应用,你必须安装 Android Studio。

要了解更多关于两个平台的信息,请参阅这里的文档 (https://flutter.io/setup-macos/#platform-setup).

创建你的第一个 Flutter 应用程序

现在我们已经安装了 flutter CLI,我们可以创建我们的第一个应用程序。 为此,我们需要运行 flutter create 命令:

flutter create myapp

这将为你创建一个新的应用程序。 现在,切换到新目录,打开 iOS 模拟器或 android 模拟器,然后运行以下命令:

flutter run

这将在你已经打开的模拟器中启动应用程序。 如果你同时打开了 iOS 和 Android 模拟器,你可以通过模拟器来运行这个应用程序:

flutter run -d android / flutter run -d iPhone

也可以同时运行

flutter run -d all

此时你应该在控制台中看到一些关于重启 app 的信息:

项目结构

你正在运行的代码处于 lib/main.dart 文件中。

你也会注意到,我们有一个 android 文件夹和一个 iOS 文件夹,我们的本地项目就在这里。

项目的配置位于 pubspec.yaml 文件中,类似于 JavaScript 生态系统中的 package.json 文件。

现在让我们看一下 lib / main.dart

在文件的顶部我们看到一个 import :

import 'package:flutter/material.dart';

这是从哪里来的? 在 pubspec.yaml 文件中,你会注意到在依赖项下我们有一个单独的 flutter 依赖项,我们在这里引用它作为包: package:flutter/ 。 如果我们想要添加和导入其他依赖项,我们需要将新的依赖项加入 pubspec.yaml ,使它们作为依赖可以导入。

在这个文件中,我们还可以看到在顶部有一个名为 main 的函数。 在 Dart 中,main 是一个特殊的、必需的顶级函数,在这个函数中应用程序开始执行。 因为 Flutter 是由 Dart 构建的,main 函数也是这个工程的主入口。

void main() { runApp(new MyApp());}

这个函数调用 new MyApp () ,它本身调用一个类等等,类似于 React app,我们有一个由其他组件组成的主组件,然后由 ReactDOM.render 或 AppRegistry.registerComponent 进行渲染。

组件

Flutter 技术总览 (https://flutter.io/technical-overview/) 中的一个核心原则就是:“一切皆组件”。

Widget 是每个 Flutter 应用程序的基本构件。 每个 Widget 都是用户界面部分的不可变声明。 与其他将视图、控制器、布局和其他属性分离开来的框架不同,Flutter 有一个一致的、统一的对象模型: Widget。

在 web 术语 / JavaScript 方面,你可以将 Widget 看成与 Component 类似的东西。 Widget 通常由类内部组成,这些类中可能还有一些本地状态和方法,也可能没有。

如果你查看 main.dart ,可以发现类似 StatelessWidget 、StatefulWidget 、Center 、Text 的类引用。这些都是 Widget。如果想了解所有可用的 Widget,请查阅文档 (https://docs.flutter.io/flutter/widgets/widgets-library.html)。

布局与样式

虽然 Dart 和大多数 Flutter 框架都非常简单,但是使用布局和样式起初开始有点难以理解。

要记住的主要事情是,不像 web 样式,甚至是 React Native 样式 View 会完成所有的布局和一些样式,Flutter 布局是由你选择的组件的类型它的布局和样式属性的组合决定的,这通常取决于你使用的组件的类型。

例如,Column 接受一个子属性数组,而不接受任何样式属性(只接受诸如 CrossAxisAlignment 和 direction 等布局属性) ,而 Container 接受布局和样式属性的组合。

甚至还有一些布局组件,比如 Padding,它仅接受 Widget,除了向 Widget 添加边距之外不做其它任何事情。

参考这个完整的 Widgets 目录,可以帮助你实现你想要的布局类型,包括 Container、 Row、 Column、 Center、 GridView 等组件,所有这些组件都有自己的布局规范。

Setstate / Lifecycle 函数

与 React 类似,Flutter 也有有状态和无状态组件或 Component 的概念。 有状态组件可以创建状态、更新状态和销毁状态,这在某种程度上类似于用 React 时可能使用的生命周期方法。

甚至也有一个名为 setState 的方法更新状态。 你可以在我们刚刚生成的项目中的 incrementCounter 方法中看到这个方法。

了解更多查看 StatefulWidget、 State 和 StatelessWidget。

总结

作为一个跨平台应用程序开发的开发者,我会一直关注 React Native 的竞争对手。这对于那些可能因某种原因想要不同的客户来说 Flutter 是一个可行的选择。 我认为 Flutter 为我的客户解决了一些问题,比如内置的类型系统、一流的 UI 库、由核心团队维护的导航库等。

我会将 Flutter 添加到我的技术栈中,所以当我遇到 React Native 不能解决问题的情况时,我会使用 Flutter。一旦我觉得可以在生产环境使用 Flutter,我也会将我的第一个 Flutter 应用程序作为另一个选择呈现给我的客户。

我叫 Nader Dabit,是一名 AWS Mobile 的开发者,开发了 AppSync、Amplify 等应用,同时也是 React Native Training 的创始人。

如果你喜欢 React 和 React Native,欢迎在 Devchat.tv 订阅我们的 podcast - React Native Radio。

此外,Manning Publications 已经出版了我的书 React Native in Action,欢迎阅读。

版权

出处:公众号:FENews

译者:itxuye

英文原文地址:https://hackernoon.com/flutter-for-javascript-developers-35515e533317

相关推荐

pyproject.toml到底是什么东西?(py trim)

最近,在Twitter上有一个Python项目的维护者,他的项目因为构建失败而出现了一些bug(这个特别的项目不提供wheel,只提供sdist)。最终,发现这个bug是由于这个项目使用了一个pypr...

BDP服务平台SDK for Python3发布(bdp数据平台)

下载地址https://github.com/imysm/opends-sdk-python3.git说明最近在开发和bdp平台有关的项目,用到了bdp的python的sdk,但是官方是基于p...

Python-for-Android (p4a):(python-for-android p4a windows)

一、Python-for-Android(p4a)简介Python-for-Android(p4a),一个强大的开发工具,能够将你的Python应用程序打包成可在Android设备上运行...

Qt for Python—Qt Designer 概览

前言本系列第三篇文章(QtforPython学习笔记—应用程序初探)、第四篇文章(QtforPython学习笔记—应用程序再探)中均是使用纯代码方式来开发PySide6GUI应用程序...

Python:判断质数(jmu-python-判断质数)

#Python:判断质数defisPrime(n):foriinrange(2,n):ifn%i==0:return0re...

为什么那么多人讨厌Python(为什么python这么难)

Python那么棒,为什么那么多人讨厌它呢?我整理了一下,主要有这些原因:用缩进替代大括号许多人抱怨Python完全依赖于缩进来创建代码块,代码多一点就很难看到函数在哪里结束,那么你就需要把一个函数拆...

一文了解 Python 中带有 else 的循环语句 for-else/while-else

在本文中,我们将向您介绍如何在python中使用带有else的for/while循环语句。可能许多人对循环和else一起使用感到困惑,因为在if-else选择结构中else正常...

python的numpy向量化语句为什么会比for快?

我们先来看看,python之类语言的for循环,和其它语言相比,额外付出了什么。我们知道,python是解释执行的。举例来说,执行x=1234+5678,对编译型语言,是从内存读入两个shor...

开眼界!Python遍历文件可以这样做

来源:【公众号】Python技术Python对于文件夹或者文件的遍历一般有两种操作方法,一种是至二级利用其封装好的walk方法操作:import osfor root,d...

告别简单format()!Python Formatter类让你的代码更专业

Python中Formatter类是string模块中的一个重要类,它实现了Python字符串格式化的底层机制,允许开发者创建自定义的格式化行为。通过深入理解Formatter类的工作原理和使用方法,...

python学习——038如何将for循环改写成列表推导式

在Python里,列表推导式是一种能够简洁生成列表的表达式,可用于替换普通的for循环。下面是列表推导式的基本语法和常见应用场景。基本语法result=[]foriteminite...

详谈for循环和while循环的区别(for循环语句与while循环语句有什么区别)

初九,潜龙勿用在刚开始使用python循环语句时,经常会遇到for循环和while循环的混用,不清楚该如何选择;今天就对这2个循环语句做深入的分析,让大家更好地了解这2个循环语句以方便后续学习的加深。...

Python编程基础:循环结构for和while

Python中的循环结构包括两个,一是遍历循环(for循环),一是条件循环(while循环)。遍历循环遍历循环(for循环)会挨个访问序列或可迭代对象的元素,并执行里面的代码块。foriinra...

学习编程第154天 python编程 for循环输出菱形图

今天学习的是刘金玉老师零基础Python教程第38期,主要内容是python编程for循环输出菱形※。(一)利用for循环输出菱形形状的*号图形1.思路:将菱形分解为上下两个部分三角形图案,分别利用...

python 10个堪称完美的for循环实践

在Python中,for循环的高效使用能显著提升代码性能和可读性。以下是10个堪称完美的for循环实践,涵盖数据处理、算法优化和Pythonic编程风格:1.遍历列表同时获取索引(enumerate...