Flutter for Android

news2024/11/16 6:24:57

将 Flutter 添加到现有应用程序

在 Flutter 中一次重写整个应用程序是不切实际的。 对于这些情况,Flutter 可以作为库或模块逐步集成到您现有的应用程序中。 然后可以将该模块导入到您的 Android 或 iOS(当前支持的平台)应用程序中,以在 Flutter 中呈现应用程序 UI 的一部分。 或者,只是为了运行共享的 Dart 逻辑。

添加到应用程序功能支持集成任何屏幕尺寸的多个实例。 这可以帮助一些场景,例如具有混合原生屏幕和 Flutter 屏幕的混合导航堆栈,或具有多个部分屏幕 Flutter 视图的页面。

Add to Android applications (添加到 Android 应用程序)

  • 通过将 Flutter SDK 挂钩添加到 Gradle 脚本来自动构建和导入 Flutter 模块。
  • 将您的 Flutter 模块构建到通用 Android 存档 (AAR) 中,以便集成到您自己的构建系统中,并实现更好的 Jetifier 与 AndroidX 的互操作性。
  • FlutterEngine API 用于独立于附加 FlutterActivity/FlutterFragment 等来启动和持久化您的 Flutter 环境。
  • android Studio Android/Flutter 协同编辑和模块创建/导入向导。
  • 支持 Java 和 Kotlin 主机应用程序。
  • Flutter 模块可以使用 Flutter 插件与平台进行交互。
  • 通过从 IDE 或命令行使用 flutter attach 连接到包含 Flutter 的应用程序,支持 Flutter 调试和有状态热重载。

Flutter 中的视图

反应式或声明式编程与传统的命令式编程有何不同? 声明式 UI 简介。

声明式 UI 简介

Flutter 使用的声明式风格与许多其他 UI 框架使用的命令式风格之间的概念差异。

为什么要声明式 UI?

Android 和 iOS 的框架通常使用命令式的 UI 编程风格。 手动构建一个功能齐全的 UI 实体,例如 UIView 或等效项,然后在 UI 更改时使用方法和设置器对其进行修改。

为了减轻开发人员必须编写如何在各种 UI 状态之间转换的负担,Flutter 让开发人员描述当前的 UI 状态并将转换留给框架。

对如何操作 UI 的思维方式稍作转变。

如何在声明性框架中更改 UI?

 在命令式风格中,您通常会转到 ViewB 的所有者并使用选择器或使用 findViewById 或类似方法检索实例 b,并对其调用。

 

// Imperative style
b.setColor(red)
b.clearChildren()
ViewC c3 = new ViewC(...)
b.add(c3)

 

// Declarative style
return ViewB(
  color: red,
  child: const ViewC(),
);

在声明式风格中,视图配置(例如 Flutter 的 Widgets)是不可变的,只是轻量级的“蓝图”。 要更改 UI,小部件会触发自身的重建(最常见的方法是在 Flutter 中调用 StatefulWidgets 上的 setState() )并构建一个新的小部件子树。

Flutter 不是在 UI 更改时改变旧实例 b ,而是构建新的 Widget 实例。 该框架使用 RenderObjects 在幕后管理传统 UI 对象的许多职责(例如维护布局状态)。 RenderObjects 在帧之间持续存在,Flutter 的轻量级 Widgets 告诉框架在状态之间改变 RenderObjects。 Flutter 框架会处理剩下的事情。

在 Android 中,视图是屏幕上显示的所有内容的基础。 按钮、工具栏和输入,一切都是视图。 在 Flutter 中,与 View 大致对应的是 Widget。 小部件并不完全映射到 Android 视图,但是当您熟悉 Flutter 的工作原理时,您可以将它们视为“您声明和构建 UI 的方式”。

但是,这些与视图有一些不同。 首先,小部件具有不同的生命周期:它们是不可变的,只存在到需要更改时才存在。 每当小部件或其状态发生变化时,Flutter 的框架都会创建一个新的小部件实例树。 相比之下,Android 视图只绘制一次并且在调用 invalidate 之前不会重绘。

Flutter 的小部件是轻量级的,部分原因在于它们的不变性。 因为它们本身不是视图,也没有直接绘制任何东西,而是对 UI 及其语义的描述,这些语义被“加载”到引擎盖下的实际视图对象中。

Flutter 包含 Material Components 库。 这些是实现 Material Design 指南的小部件。 Material Design 是一种针对所有平台(包括 iOS)优化的灵活设计系统。

但 Flutter 的灵活性和表现力足以实现任何设计语言。 例如,在 iOS 上,您可以使用 Cupertino 小部件来生成类似于 Apple 的 iOS 设计语言的界面。

First flutter demo

import 'package:flutter/material.dart';

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

class SampeApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Sample App',
      theme: new ThemeData(primarySwatch: Colors.blue),
      home: new SampleAppPage(key: UniqueKey()),
    );
  }
}

class SampleAppPage extends StatefulWidget {
  SampleAppPage({required Key key}) : super(key: key);

  @override
  _SampleAppPageState createState() {
    return new _SampleAppPageState();
  }
}

class _SampleAppPageState extends State<SampleAppPage> {
  String textToShow = "Flutter";

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(title: new Text("Sample App")),
        body: new Center(child: new Text(textToShow)),
        floatingActionButton: new FloatingActionButton(
            onPressed: _updateText,
            tooltip: 'Update Text',
            child: new Icon(Icons.update)));
  }

  void _updateText() {
    setState(() {
      textToShow = "Flutter is Awesome!";
    });
  }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GEE学习笔记 八十六:分类中的特征重要性分析

之前在GEE中做随机森林分类时候&#xff0c;很多人都在问如何做特征重要性分析&#xff1f;但是在GEE之前并没有相关API可以做特征重要性分析&#xff0c;最新的API更新后GEE也可以做特征重要性分析了。 1、目前常用的包含特征重要信息分析的分类方法包括&#xff1a; &#…

基础篇:03-SpringCloud工程部署启动

目录 1.工程搭建部署 方案一&#xff1a;完整工程导入 方案二&#xff1a;从零开始搭建 1.工程与module创建 2.数据库导入 3.项目启动 3.1 启动并访问user-service 3.2 启动并访问order-service 4.服务远程调用 时序图说明 服务远程调用实现 注入RestTemplate Res…

自学web前端觉得好难,可能你遇到了这些困境

好多人跟我说上学的时候也学过前端&#xff0c;毕业了想从事web前端开发的工作&#xff0c;但自学起来好难&#xff0c;快要放弃了&#xff0c;所以我总结了一些大家遇到的困境&#xff0c;希望对你会有所帮助。 目录 1. 意志是否坚定 2. 没有找到合适自己的老师 3. 为了找…

论文阅读【PAMI_2022】FSGANv2: Improved Subject Agnostic Face Swapping and Reenactment

论文阅读【PAMI_2022】FSGANv2: Improved Subject Agnostic Face Swapping and Reenactment论文的缩写全拼一、摘要&#xff08;问题&#xff0c;贡献&#xff0c;效果&#xff09;二、引言&#xff08;idea&#xff09;三、方法(FSGAN)1.Detection and tracking2.Generator ar…

node学习-3:服务器渲染和客户端渲染

1. 概念 一.服务端渲染&#xff0c;后端嵌套模板&#xff0c;后端渲染模板&#xff0c;SSR&#xff08;后端把页面组装好&#xff09; 做好静态页面&#xff0c;动态效果 把前端代码提供给后端&#xff0c;后端则把静态html以及里面的假数据给删除掉 通过模板进行动态生成h…

8个让你收入翻倍的高质量免费网站

毕业几年了&#xff0c;如果你的月薪不到1w&#xff0c;还是做着重复机械的动作&#xff0c;现在马上往下看&#xff0c;今天分享6个资源网站让你的收入暴增&#xff0c;尤其是最后一个。每天花一个小时&#xff0c;让你工资翻倍&#xff0c;从此在职场横着走&#xff0c;再也不…

GEE学习笔记 八十三:【GEE之Python版教程十三】几何图形

遥感分析中用到的数据主要就是这两大类&#xff1a;矢量数据和栅格数据。在Google Earth Eninge中&#xff0c;它为我们讲这两类数据封装成为了以下几类数据。 下面几节内容我会依次讲解相关内容的详细信息&#xff0c;这一节先讲一下几何图形ee.geometry。 学习任何新的东西首…

设计模式之抽象工厂模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、抽象工厂模式是什么&#xff1f; 抽象工厂模式是一种创建型的软件设计模式&#xff0c;该模式相当于升级版的工厂模式。 如果…

采集知乎评论

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! excel保存效果图: 首先我们找一个评论比较多的帖子,如下图所示有874条评论 点击评论…

算法刷刷刷| 回溯篇| 组合问题大集合

77.组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4], [3,4], [2,3], [1,2], [1,3], [1,4],] import java.util.ArrayList; import java.util.List;clas…

可靠、稳定、安全,龙蜥云原生容器镜像正式发布!

文/云原生 SIG01背景随着云原生的蓬勃发展&#xff0c;越来越多的企业在自己的生产或者测试环境使用云原生技术&#xff0c;而容器镜像正是云原生技术中应用的实际运行环境。一个好的容器运行环境即容器镜像会真正关系到应用的体验、演进和维护。那么选择一个好的容器镜像需要考…

Flink实时同步MySQL与Doris数据

参考&#xff1a; 技术解析&#xff5c;Doris Connector 结合 Flink CDC 实现 MySQL 分库分表 Exactly Once 精准接入-阿里云开发者社区 逻辑图&#xff1a; 1. Flink环境&#xff1a; https://flink.apache.org/zh/ 下载flink-1.15.1 wget https://dlcdn.apache.org/flink…

并发编程之synchronized详解

目录 设计同步器的意义 如何解决线程并发安全问题&#xff1f; synchronized原理详解 synchronized底层原理 Monitor监视器锁 什么是monitor&#xff1f; 对象的内存布局 对象头 对象头分析工具 锁的膨胀升级过程 偏向锁 轻量级锁 自旋锁 锁消除 逃逸分析 设…

RabbitMQ学习(七):交换器

〇、前言在之前的内容中&#xff0c;我们创建了一个工作队列。我们假设的是工作队列背后&#xff0c;每个任务都恰好交付给一个消 费者(工作进程)。在今天的内容中&#xff0c;我们将做一些完全不同的事情——我们将消息传达给多个消费者。这种模式 称为 “发布/订阅”。为了说…

横板格斗类游戏实战:核心玩法介绍(一)

第一章讲解了横板格斗类游戏框架主要涉及到的一些模块设计与技术原理&#xff0c;本章节开始讲解横板格斗类游戏的玩法&#xff0c;美术资源与游戏的数值策划。我们以主要的截图为示意图&#xff0c;来把整个横板格斗类游戏的核心玩法和要实现的功能大致列一遍。对啦&#xff0…

QGIS中进行批量坡向计算

QGIS中进行坡向计算1. 坡向计算中的Z因子&#xff08;垂直单位与水平单位的比值&#xff09;2. 坡向计算步骤坡度计算的姊妹篇–坡向计算来了 1. 坡向计算中的Z因子&#xff08;垂直单位与水平单位的比值&#xff09; z 因子是一个转换因子&#xff0c;当输入表面的垂直坐标&…

BFC到底是什么?如何理解

BFC到底是什么&#xff1f; BFC全称&#xff1a;Block Formatting Context&#xff0c; 名为“块级格式化上下文”。 W3C官方解释&#xff1a;BFC 它决定了元素如何对其内容进行定位&#xff0c;以及与其他元素的关系和相互作用&#xff0c;当涉及到可视化布局时&#xff0c;B…

IMU调试方案

1.IMU 型号 QMI8658C IMU英文数据手册 参照连线与数据手册使用 类似的惯导模块开发https://www.cnblogs.com/rockyching2009/p/15071669.html 微雪 https://www.waveshare.net/wiki/RP2040-LCD-1.28 micro python &#xff1a;https://docs.micropython.org/en/latest/esp32/t…

ArcGIS API for JavaScript 4.15系列(7)——Dojo中的Ajax请求操作

1、前言 作为重要的前后端交互技术&#xff0c;Ajax被广泛应用于Web项目中。无论是jQuery时代的$.ajax还是Vue时代下的axios&#xff0c;它们都对Ajax做了良好的封装处理。而Dojo也不例外&#xff0c;开发者使用dojo/request模块可以轻松实现Ajax相关操作&#xff0c;下面开始…

UNP 简介

目录 从一个简单的时间获取客户端开始 socket 指定服务器 IP 地址与端口 与服务器建立连接并读取数据 简单的时间获取服务端 Unix 标准 从一个简单的时间获取客户端开始 接下来&#xff0c;将从一个使用 TCP 连接的获取时间的客户端开始。 // 以下代码与 UNP intro/dayt…