Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面

这篇具有很好参考价值的文章主要介绍了Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


theme: cyanosis

1. 前言

很多朋友可能在布局过程中、或者组件使用过程中,会遇到诸如颜色、尺寸、约束、定位等问题,可能会让你抓耳挠腮。俗话说,磨刀不误砍柴工,会使用工具是非常重要的,其实 Flutter 提供了强大的调试工具,可以辅助我们去查看界面布局中的一切细节。

基于这些细节,可以很轻松地去解决布局相关的疑难杂症。 也能让我们对界面的布局有更深刻的认知,这就是 : Flutter Inspector ,如果你使用 AndroidStudio,可以在如下的侧栏选项卡中打开:

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter


光秃秃地介绍如何使用的话,或许太过无聊;下面就通过一个实际的小问题的解决过程,来讲述一下如何通过 Flutter Inspector 来分析界面结构和寻找关键源码。如下所示,左下角的菜单弹框,在 useMaterial3 下呈紫色,而 PopupMenuButton 并没有直接修改弹出框背景色的配置项。接下来将通过布局分析器,来解决如下几个问题:

  1. PopupMenuButton 弹出菜单,其背景是何时、如何着色的。
  2. 如何修改弹出菜单的背景色。
  3. 弹出菜单在界面树形结构中,处于哪个层级。

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

本文具体源码就不贴了,跑起来之后和本文一起使用 Flutter Inspector 来分析。源码地址在:

LoveNote520/LoveNote: 提交节点


2. Flutter Inspector 窗口基本介绍

首先,需要将应用运行起来, Flutter Inspector 才能展示信息。如下所示,映入眼帘的主要有三个部分

[1]. 顶部的操作工具栏。
[2]. 左侧的组件树信息。
[3]. 右侧的选中组件的详情信息。

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

首先强调一下,左侧的树形结构中每个组件条目,对应着右侧的一个面板。也就是说,你每当点击一个左侧组件树中的节点,右侧的面板信息就会更新:

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

其中右侧面板 Layout Explorer 可视化地展示出:

[1]. 当前组件对应的渲染对象树,受到的 父级约束
[2]. 当前组件对应的渲染对象树,其在界面中的 尺寸
[3]. 当前组件对应的渲染对象树,向子级的 传递约束

如果看过 《Flutter 布局探索 - 薪火相传》 的朋友,不难理解,对于布局来说 父级约束尺寸传递约束 这三者是何其重要。而 Layout Explorer 可视化地将这些信息展示出来,就非常便于我们去分析布局的细节。


在面板右侧,有一个 Widget Datails Tree 的选项卡,是极其重要而有用的。同样,你每当点击一个左侧组件树中的节点,Widget Datails Tree 信息也会更新。其中可以展示某个 Widget 构建过程中的所有细节,包括 dependencies 依赖、state 状态类、properties 调试属性、Widget 派生类的所有属性。

以及最重要的 某个 Widget 对应的渲染对象 renderObject,从渲染对象中,可以进一步分析约束、尺寸、数据等信息。细致入微地去了解当前界面中展示的逻辑,这样从内部寻找病因,就能更精准地对症下药。

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter


3. 选择模式与具体组件分析

选择模式 Select Widget Model 是一个非常好用的工具。如下所示,点击之后,可以在应用界面中点一下,面板在就可以自动选中被点击的组件。这就可以大大提高查看界面视图中每个组件构建信息的效率,不必一个个自己手动去找。

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter


如下所示,往上翻一下,就可以很容易定位到颜色的来源,PopupMenuButton 弹出框的视图,由源码内部的 _PopupMenu 组件所构建,其中背景色由 Material 组件所设置。

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

所以,此时全局搜索一下 _PopupMenu 组件,看看使用 Material 组件时颜色怎么传递的就可以了。如下所示,颜色值是三个:依次取用 路由颜色、弹框主题色、默认颜色。

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

从源码中不难看出,PopupMenuTheme 可以设置这里的背景颜色;如果没有主题色,将会取用 defaults 主题数据,这里根据 useMaterial3 来确定的,这就是主题中 useMaterial3 可以影响弹框颜色的根本原因。

dart ---->[_PopupMenu#build]---- final ThemeData theme = Theme.of(context); final PopupMenuThemeData popupMenuTheme = PopupMenuTheme.of(context); final PopupMenuThemeData defaults = theme.useMaterial3 ? _PopupMenuDefaultsM3(context) : _PopupMenuDefaultsM2(context);


3. 修改弹框颜色

有了上面的布局、源码分析之后,弹出框的背景色就很好修改了: 如下所示,提供 popupMenuTheme ,设置白色背景即可:

dart theme: ThemeData( fontFamily: 'aldk', colorSchemeSeed: const Color(0xff6750a4), popupMenuTheme: PopupMenuThemeData( color: Colors.white, ), useMaterial3: true, ),

如下所示,color 虽然设成了白色,但是弹框背景肉眼看起来很明显不是白色。不过看起来没有之前那么紫了,也就是说只设置 popupMenuTheme 的颜色,有一点用,但是不多。这是什么原因呢?

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

前面说了,一切界面展示中存在的问题,都可以通过 Flutter Inspector 来分析。可以先用拾色器看一下,颜色是 F3F1F7,确实不是白色。

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter


如下所示,可以看出 Material 内部使用了 PhysicalShape 组件,其颜色恰是 F3F1F7 。这就说明 Material 的颜色并不仅仅是由 color 属性决定的,肯定和其他颜色混合了一下。下面就看一下源码中对颜色的处理逻辑。

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

下面是 Material 组件中的源码实现,可以很清晰的看出 useMaterial3 下,AnimatedPhysicalModel 的颜色是由 backgroundColor (Material#color) 和 surfaceTintColor 以及 elevation 共同决定的。 Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

颜色的换算过程由 ElevationOverlay.applySurfaceTint 处理,通过如下代码不难看出 surfaceTint 设为 null 或透明,就可以避免其对颜色的影响。

dart static Color applySurfaceTint(Color color, Color? surfaceTint, double elevation) { if (surfaceTint != null && surfaceTint != Colors.transparent) { return Color.alphaBlend(surfaceTint.withOpacity(_surfaceTintOpacityForElevation(elevation)), color); } return color; }

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

对于任何界面展示效果的问题,都可以通过 Flutter Inspector 来分析、定位问题所在,再查看相关的源码来解决。这就是通过 解决问题 ,进行探索和学习。也许有时候解决方案很简单,但过程中你会学得的更多。比如通过布局分析器查看时,你会发现:弹框是一个在 MaterialApp 下的独立路由,通过 _OverlayEntryWidget 挂在 _Theater 下显示,我们的应用界面也是一个 _OverlayEntryWidget 。这就不再展开了,有机会专门介绍一下。

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面,flutter

这种解决问题流程中积攒的经验,将是非常宝贵的,它可以让你看清问题的根源所在,对整体有更好的把握。那本文就到这了,谢谢观看 ~ 文章来源地址https://www.toymoban.com/news/detail-619128.html

到了这里,关于Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter学习四:Flutter开发基础(六)调试Flutter应用

    目录 0 引言 1 调试Flutter应用 1.1 日志与断点 1.1.1 debugger() 声明 1.1.2 print和debugPrint 1.1.3 调试模式、中间模式、发布模式 1.1.4 断点 1.2 调试应用程序层 1.2.1 转储Widgets树 1.2.2  转储渲染树 1.2.3 转储Layer树 1.2.4 转储语义树 1.2.5 调度(打印帧的开始和结束) 1.2.6 可视化调试

    2024年02月12日
    浏览(44)
  • Flutter 单例模式的多种实现方法与使用场景分析

    单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Flutter应用程序中,单例模式可以有效地管理全局状态、资源共享和对象的生命周期。本文将介绍Flutter中实现单例模式的多种方法,并分析它们的使用场景。 1. 懒加载单例 懒加载单例

    2024年04月16日
    浏览(33)
  • Android flutter项目 启动优化实战(一)使用benchmark分析项目

     Android flutter项目 启动优化实战(一)使用benchmark分析项目 Android flutter项目 启动优化实战(二)利用 App Startup 优化项目和使用flutterboost中的问题解决 启动时间是用户对应用的第一印象,较慢的加载会对用户的留存和互动造成负面影响 在刚上线的Android 原生flutter 的B端项目中

    2024年02月03日
    浏览(30)
  • Flutter - 搭建引擎调试环境(iOS)

    刚开始学Flutter开发时搭建过,没有记录。现在有需要时又忘了,果然好记性不如烂笔头。 注意,调试环境搭建会占用较大硬盘空间。粗略统计,Flutter引擎项目(包含依赖的第三方库)约20GB, host_debug_unopt 构建编译后约16GB, ios_debug_xxx 构建编译后约5GB。所以如果想搭建成功

    2024年02月05日
    浏览(46)
  • ubuntu cutecom串口调试工具使用方法(图形界面)

    串口通信是计算机与其他设备进行数据交换的一种非常基本和传统的方式。在Linux系统,尤其是Ubuntu中,有多种工具可以用来进行串口调试,而CuteCom是其中一个用户友好且功能强大的图形界面应用程序。 CuteCom是一个跨平台的串口终端程序,它提供了一个简洁直观的图形用户

    2024年02月04日
    浏览(31)
  • 【flutter电子木鱼】flutter 打包 android apk,记录配置签名的过程/调试的过程及flutter build apk放到手机上用。

    目标通过这篇blog记录一下flutter打包android apk的过程,项目是参考以下链接的git仓库,然后自己重新创建了一个project。安卓应用市场的木鱼充斥着广告和付费体验极差,自己做一个还可以根据喜好做适应性调整,不用担心被偷后台也不用烦广告和一些奇怪的布局,干净清爽,

    2024年02月10日
    浏览(42)
  • Flutter 如何将代码显示到界面上

    如何优雅的将项目中的代码,亦或是你的demo代码展示到界面上?本文对使用简单、便于维护且通用的解决方案,进行相关的对比和探究 为了节省大家的时间,把最终解决方案的相关接入和用法写在前面 接入:pub,github 用法:CodePreview,提供需要预览的className,可自动匹配该

    2024年02月02日
    浏览(19)
  • flutter聊天界面-自定义表情键盘实现

    flutter聊天界面-自定义表情键盘实现 flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 flutter开发基础腾讯IM的聊天应用,使用的是tencent_im_sdk_plugin插件。使用的是自定义表

    2024年02月13日
    浏览(39)
  • VSCode 开发flutter 实现安卓设备远程调试

    目前只找到了安卓的调试方案😬。 1首先安装 ADB Commanads for VSCode扩展 并且必须确保ADB已经添加到系统环境变量中 如未添加请按照下面的方式添加,如添加请直接跳到下面。 2添加环境变量(windows可参考,mac忽略此项) 我将ADB安装到这个目录下,请查找自己的安装目录。 将

    2024年02月02日
    浏览(33)
  • Flutter GetX 实现 ChatGPT 简单聊天界面

    Flutter 是一款跨平台的移动应用开发框架,而 GetX 是 Flutter 中一种简单易用的状态管理和路由管理工具。本篇我们将使用 Flutter 和 GetX 实现一个简单的聊天界面,以与 ChatGPT 进行交互。 我们需要在 Flutter 项目中引入 GetX 库。在 pubspec.yaml 文件中添加以下依赖: 在 main 函数中添

    2023年04月17日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包