Flutter 实现全局悬浮按钮学习

Flutter 代码如何实现了一个全局悬浮按钮,当点击按钮时,会显示一个可以拖动并且通过长按可以移除的悬浮控件。

前置知识点学习

Offset

`Offset` 是 Flutter 中的一个类,用于表示二维平面中的位置或位移。它通常用于描述坐标系中的一个点,或者用于指定某种移动的向量。`Offset` 是在 Flutter 的绘制和布局过程中非常常用的类,尤其是在自定义绘制和触摸事件处理中。

构造函数

`Offset(double dx, double dy)`:

  • `dx`: 在水平方向上的偏移量。
  • `dy`: 在垂直方向上的偏移量。

常用属性

  • `dx`: 水平方向的偏移量。
  • `dy`: 垂直方向的偏移量。

常用方法

  • `distance`: 返回从原点(0, 0)到这个偏移量的直线距离。
  • `direction`: 返回从原点到这个偏移量的角度(以弧度为单位),相对于水平方向。
  • `scale(double scaleX, double scaleY)`: 返回一个新的 `Offset`,其 `dx` 和 `dy` 分别乘以 `scaleX` 和 `scaleY`。
  • `translate(double translateX, double translateY)`: 返回一个新的 `Offset`,其 `dx` 和 `dy` 加上 `translateX` 和 `translateY`。

操作符重载

  • 加法 (`+`): 可以将两个 `Offset` 相加,返回新的 `Offset`。
  • 减法 (`-`): 可以将两个 `Offset` 相减,返回新的 `Offset`。
  • 乘法 (`*`): 可以将 `Offset` 与一个标量相乘,返回新的 `Offset`。
  • 除法 (`/`): 可以将 `Offset` 与一个标量相除,返回新的 `Offset`。

示例

下面是一个简单的示例,展示如何使用 `Offset`:

import 'package:flutter/material.dart';class OffserExample extends StatelessWidget {const OffserExample({super.key});@overrideWidget build(BuildContext context) {Offset offset1 = const Offset(10.0, 20.0);Offset offset2 = const Offset(5.0, 15.0);Offset result = offset1 + offset2; // Add two offsetsdouble distance = result.distance; // Calculate distance from originreturn Scaffold(appBar: AppBar(title: const Text('Offset Example'),),body: Center(child: Text('Resulting Offset: $result\nDistance from origin: $distance',textAlign: TextAlign.center,),),);}
}

解释

  • 在这个示例中,`offset1` 和 `offset2` 是两个 `Offset` 实例。
  • 通过 `+` 操作符,我们将两个 `Offset` 相加,得到一个新的 `Offset`。
  • `distance` 属性计算从原点到 `result` 的直线距离。

使用场景

  • 自定义绘制: 在 Flutter 的 `CustomPainter` 中,`Offset` 常用于指定绘制起点。
  • 触摸事件: 在处理触摸事件时,`Offset` 用于描述触摸点的位置。
  • 布局计算: 在自定义布局逻辑中,`Offset` 可以用于计算组件的位置和移动。

Overlay

`Overlay` 是 Flutter 中的一个强大组件,用于在应用的普通界面层之上创建浮动层。它允许开发者在现有界面之上展示额外的内容,比如弹出窗口、工具提示、悬浮按钮等。这种层叠效果是通过 `OverlayEntry` 来实现的。

主要特性

  • 层叠显示: `Overlay` 可以将多个 `OverlayEntry` 叠加在一起,形成一个层次结构,最上面的条目会显示在最上层。
  • 动态插入和移除: 可以在运行时动态添加或移除 `OverlayEntry`,从而实现动态显示和隐藏界面元素。
  • 灵活性: 可以在任何地方插入 `OverlayEntry`,不受父组件的限制,这给予了开发者极大的灵活性。

核心组件

1.`Overlay`:

  • `Overlay` 是一个用于管理和显示 `OverlayEntry` 的容器。通常在 `MaterialApp` 的根布局中已经存在一个 `Overlay`。

2.`OverlayEntry`:

  • `OverlayEntry` 是一个可以插入到 `Overlay` 中的条目。每个条目都可以独立控制其显示和隐藏。

使用步骤

1.获取 `Overlay` 的引用:

  • 使用 `Overlay.of(context)` 来获得当前上下文的 `Overlay` 实例。

2.创建 `OverlayEntry`:

  • 定义一个 `OverlayEntry`,提供一个 `builder` 方法来返回要显示的 widget。

3.插入 `OverlayEntry`:

  • 使用 `Overlay.insert(overlayEntry)` 方法,将 `OverlayEntry` 插入到 `Overlay` 中。

4.移除 `OverlayEntry`:

  • 调用 `overlayEntry.remove()` 方法来从 `Overlay` 中移除条目。

示例

以下是一个简单的示例,展示如何使用 `Overlay` 来显示一个悬浮的红色圆形按钮:

import 'package:flutter/material.dart';class OverlayExample extends StatefulWidget {const OverlayExample({super.key});@override_OverlayExampleState createState() {return _OverlayExampleState();}
}class _OverlayExampleState extends State<OverlayExample> {OverlayEntry? _overlayEntry;void _showOverlay(BuildContext context) {OverlayState overlayState = Overlay.of(context);_overlayEntry = OverlayEntry(builder: (context) => Positioned(top: 100,left: 100,child: GestureDetector(onTap: () {_overlayEntry?.remove();},child: const CircleAvatar(radius: 50,backgroundColor: Colors.redAccent,child: Icon(Icons.close,color: Colors.white,),),)));overlayState.insert(_overlayEntry!);}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Overlay Example'),),body: Center(child: ElevatedButton(onPressed: () => _showOverlay(context),child: const Text('Show Overlay'),),),);}
}

解释

`OverlayEntry`:

  • 创建了一个 `OverlayEntry`,它包含一个 `Positioned` widget,用于定位其位置。
  • 包含一个 `GestureDetector`,用来监听点击事件,点击后移除该 `OverlayEntry`。

展示和移除:

  • 点击按钮调用 `_showOverlay` 方法,将 `OverlayEntry` 插入到 `Overlay` 中。
  • `GestureDetector` 侦听点击事件。当用户点击红色圆形按钮时,调用 `_overlayEntry?.remove()` 将其从 `Overlay` 中移除。

使用场景

  • 浮动按钮: 实现全局悬浮按钮,用户可以在任何页面上访问。
  • 弹出窗口: 创建自定义的弹出窗口或对话框,而不需要中断当前页面的布局。
  • 工具提示: 在特定的 UI 元素上方显示工具提示或帮助信息。
  • 通知: 实现临时通知或警告,显示在应用的顶部或底部。

注意事项

  • 层叠顺序: `OverlayEntry` 是按插入顺序堆叠的,后插入的条目会显示在前面的条目之上。
  • 管理条目: 在使用 `OverlayEntry` 时,确保正确管理其生命周期,避免内存泄漏。例如,及时调用 `remove()` 方法移除不再需要的条目。
  • 性能考虑: 虽然 `Overlay` 提供了灵活的 UI 设计,但在频繁更新或大量使用时,可能会影响性能。因此,合理使用 `Overlay` 以保持应用的流畅性。

通过 `Overlay` 和 `OverlayEntry`,Flutter 提供了强大的工具来创建灵活的 UI 组件,允许在不干扰现有布局的情况下实现复杂的用户交互。

GestureDetector

`GestureDetector` 是 Flutter 中用于检测手势的一个小部件。它可以包裹其他小部件,并通过监听用户的手势来响应触摸事件。`GestureDetector` 提供了多种手势回调函数,允许开发者处理点击、双击、长按、拖动、缩放等手势。

主要属性

`GestureDetector` 提供了多种手势检测回调,以下是一些常用的属性:

  • `onTap`: 当用户轻触屏幕时触发。
  • `onDoubleTap`: 当用户快速连续点击两次时触发。
  • `onLongPress`: 当用户长时间按住屏幕时触发。
  • `onPanUpdate`: 当用户在屏幕上拖动时触发,每次拖动位置变化时都会调用。
  • `onPanStart`: 当用户开始拖动时触发。
  • `onPanEnd`: 当用户结束拖动时触发。
  • `onScaleUpdate`: 当用户执行缩放手势时触发。
  • `onVerticalDragUpdate`: 当用户在垂直方向上拖动时触发。
  • `onHorizontalDragUpdate`: 当用户在水平方向上拖动时触发。

使用示例

以下是一个简单的示例,展示如何使用 `GestureDetector` 处理点击和拖动手势:

import 'package:flutter/material.dart';class GestureDetectorExample2 extends StatefulWidget {const GestureDetectorExample2({super.key});@override_GestureDetectorExampleState2 createState() {return _GestureDetectorExampleState2();}
}class _GestureDetectorExampleState2 extends State<GestureDetectorExample2> {Color _color = Colors.blueGrey;Offset _offset = const Offset(100, 100);@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('GestureDetector Example'),),body: Stack(children: [Positioned(left: _offset.dx,top: _offset.dy,child: GestureDetector(onTap: () {setState(() {_color = _color == Colors.blue ? Colors.red : Colors.blue;});},onPanUpdate: (details) {setState(() {_offset += details.delta;});},child: Container(width: 100,height: 100,color: _color,child: const Center(child: Text('Tap or Drag',style: TextStyle(color: Colors.white),),),),))],),);}
}

解释

  • `GestureDetector`: 包裹了一个 `Container`,用于检测点击和拖动手势。
  • `onTap` 回调: 每次点击 `Container` 时,切换颜色。
  • `onPanUpdate` 回调: 每次拖动时更新 `_offset`,从而移动 `Container` 的位置。
  • `Positioned`: 用于根据 `_offset` 的值定位 `Container`,从而实现拖动效果。

使用场景

  • 交互元素: 为按钮、图标或任何可交互元素添加手势响应。
  • 自定义手势: 在自定义组件中实现复杂的手势交互,如拖放、缩放等。
  • 游戏开发: 在游戏中检测用户的触摸和拖动以实现交互。

Material

`Material` 是 Flutter 提供的一个核心组件,它实现了 Material Design 的视觉效果和行为规范。`Material` 小部件是许多 Flutter UI 组件的基础,比如按钮、卡片、对话框等,这些组件都依赖于 `Material` 来提供背景、阴影、剪裁等效果。

主要功能

  • 背景颜色: `Material` 提供了背景颜色,可以是单一颜色或者是渐变。
  • 阴影: 通过 `elevation` 属性,`Material` 可以在其下方投射阴影,营造出悬浮的效果。
  • 剪裁: 通过 `shape` 属性,可以将 `Material` 剪裁成特定的形状,如圆形、矩形、圆角矩形等。
  • 触觉反馈: 在交互时,`Material` 提供了触觉反馈,比如波纹效果(`InkWell`)。

主要属性

  • `color`: 设置 `Material` 的背景颜色。
  • `elevation`: 控制阴影的深度,值越大阴影越明显。
  • `shape`: 定义 `Material` 的形状,可以是 `RoundedRectangleBorder`、`CircleBorder` 等。
  • `borderRadius`: 如果形状是矩形,可以通过这个属性设置圆角。
  • `type`: 指定 `Material` 的类型,`MaterialType.canvas` 表示没有阴影的背景,`MaterialType.card` 表示有阴影的卡片。

示例

以下是一个简单的示例,展示如何使用 `Material`:

import 'package:flutter/material.dart';class MaterialExample extends StatelessWidget {const MaterialExample({super.key});@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Material Example'),),body: Center(child: Material(color: Colors.blueGrey,elevation: 5.0,borderRadius: BorderRadius.circular(10.0),child: Container(width: 200,height: 100,alignment: Alignment.center,child: const Text('Hello, Material!',style: TextStyle(color: Colors.white, fontSize: 18),),),),),);}
}

解释

  • `Material`: 包裹了一个 `Container`,提供背景颜色、阴影和圆角效果。
  • `elevation`: 设置为 5.0,创建了一个轻微的阴影效果。
  • `borderRadius`: 通过 `BorderRadius.circular()` 设置圆角,从而使 `Material` 的背景具有圆角效果。
  • `color`: 设置为蓝色,使得 `Material` 的背景为蓝色。

使用场景

  • 卡片和面板: `Material` 常用于实现卡片、面板等带有阴影和圆角的组件。
  • 自定义按钮: 通过组合 `Material` 和 `InkWell`,可以创建自定义的按钮效果。
  • 对话框和弹出窗口: `Material` 提供了基础的视觉效果,是实现对话框、弹出窗口的基础。

注意事项

  • 性能: `elevation` 属性会增加阴影计算,因此在性能敏感的环境中应谨慎使用高阴影值。
  • 触摸效果: 需要与 `InkWell` 或 `InkResponse` 结合使用才能实现点击时的波纹效果。

BoxDecoration

`BoxDecoration` 是 Flutter 中用于装饰容器(如 `Container`)的一个类。它允许开发者为容器添加背景颜色、图像、边框、阴影和渐变等多种视觉效果。`BoxDecoration` 是一个强大的工具,能够帮助你实现复杂的 UI 样式。

主要属性

`BoxDecoration` 提供了多种属性以定义容器的装饰效果:

  • `color`: 背景颜色。设置容器的背景色。
  • `image`: 背景图像。通过 `DecorationImage` 设置背景图像及其位置、重复方式等。
  • `border`: 边框。通过 `Border` 类设置容器的边框,可以指定每边的宽度和颜色。
  • `borderRadius`: 圆角边框半径。常用于给矩形容器添加圆角。
  • `boxShadow`: 阴影效果。通过 `BoxShadow` 类定义阴影的颜色、偏移量、模糊半径和扩展半径。
  • `gradient`: 渐变效果。可以是线性渐变(`LinearGradient`)或径向渐变(`RadialGradient`)。
  • `shape`: 形状。可以是 `BoxShape.rectangle`(默认)或 `BoxShape.circle`。

使用示例

以下是一个简单的示例,展示如何使用 `BoxDecoration` 来装饰一个 `Container`:

import 'package:flutter/material.dart';class BoxDecorationExample22 extends StatelessWidget {const BoxDecorationExample22({super.key});@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('BoxDecoration Example'),),body: Center(child: Container(width: 200,height: 200,decoration: BoxDecoration(color: Colors.blue,borderRadius: BorderRadius.circular(20),border: Border.all(color: Colors.black, width: 3),boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.5),offset: const Offset(2, 2),blurRadius: 5)],gradient: const LinearGradient(colors: [Colors.blue, Colors.lightBlueAccent],begin: Alignment.topLeft,end: Alignment.bottomRight),),child: const Text('Hello, BoxDecoration!',style: TextStyle(color: Colors.white, fontSize: 16),textAlign: TextAlign.center,),),),);}
}

解释

  • `Container`: 使用 `BoxDecoration` 来装饰。
  • `color`: 设置容器的背景颜色为蓝色。
  • `borderRadius`: 通过 `BorderRadius.circular(20)` 实现圆角效果。
  • `border`: 添加一个黑色边框,宽度为 3。
  • `boxShadow`: 添加一个半透明的黑色阴影,偏移量为 (2, 2),模糊半径为 5。
  • `gradient`: 使用线性渐变从蓝色到浅蓝色。

使用场景

  • 卡片样式: 为 UI 卡片提供复杂的视觉效果,包括阴影、圆角和渐变。
  • 背景装饰: 为布局元素添加背景图像、颜色和渐变。

TextButton

`TextButton` 是 Flutter 中的一种按钮组件,是 Material Design 提供的按钮类型之一。它是一种扁平的按钮,通常用于没有明显边框或阴影的场合。`TextButton` 是 `FlatButton` 的替代品,`FlatButton` 在 Flutter 的较早版本中被使用,但在现代 Flutter 中被 `TextButton` 所取代。

主要属性

  • `onPressed`: 一个回调函数,当按钮被点击时调用。如果此属性为 `null`,按钮将被禁用,通常会变灰。
  • `child`: 按钮的内容,通常是一个 `Text` 小部件,但也可以是其他小部件,如 `Icon` 或 `Row`。
  • `style`: 用于自定义按钮的外观,包括文本样式、按钮背景颜色、形状、边距等。

使用示例

以下是如何使用 `TextButton` 的简单示例:

import 'package:flutter/material.dart';class TextButtonExample22 extends StatelessWidget {const TextButtonExample22({super.key});@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('TextButton Example'),),body: Center(child: TextButton(onPressed: () {print('TextButton pressed!');},style: TextButton.styleFrom(foregroundColor: Colors.white,backgroundColor: Colors.blue,padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10),),),child: const Text('Click'),),),);}
}

解释

  • `onPressed`: 这是一个必需的属性,用于指定按钮按下时的行为。在示例中,它简单地打印了一条消息。
  • `style`: 使用 `TextButton.styleFrom` 来定义按钮的样式。
  • `primary`: 文本颜色。
  • `backgroundColor`: 按钮背景颜色。
  • `padding`: 定义按钮内边距。
  • `shape`: 定义按钮的形状,这里使用 `RoundedRectangleBorder` 来创建圆角矩形。
  • `child`: 按钮的内容,这里是一个 `Text` 小部件,显示按钮文本。

使用场景

  • 表单提交: 用于表单中的提交按钮等。
  • 导航: 实现简单的页面导航或动作触发。
  • 扁平风格设计: 在需要满足 Material Design 扁平设计风格的应用中使用。

其他注意事项

  • 禁用状态: 如果 `onPressed` 设置为 `null`,按钮将被禁用,可以通过样式调整按钮在禁用状态下的外观。
  • 替代品: 与 `ElevatedButton` 和 `OutlinedButton` 一起,`TextButton` 是 Flutter 提供的三种主要按钮之一。它适用于不需要突出显示的按钮场景。

通过使用 `TextButton`,你可以轻松创建符合 Material Design 的现代、简洁的按钮。其灵活的样式系统允许你根据特定的设计需求自定义按钮的外观和行为。

flutter实现全局悬浮按钮代码学习

import 'package:flutter/material.dart';class FloatingTouchDemoPage22 extends StatefulWidget {const FloatingTouchDemoPage22({super.key});@override_FloatingTouchDemoPageState22 createState() {return _FloatingTouchDemoPageState22();}
}class _FloatingTouchDemoPageState22 extends State<FloatingTouchDemoPage22> {Offset offset = const Offset(200, 200);final double height = 80;_showFloating() {var overlayState = Overlay.of(context);OverlayEntry? overlayEntry;overlayEntry = OverlayEntry(builder: (context) {return Stack(children: <Widget>[Positioned(left: offset.dx,top: offset.dy,child: _buildFloating(overlayEntry),)],);});overlayState.insert(overlayEntry);}_buildFloating(OverlayEntry? overlayEntry) {return GestureDetector(behavior: HitTestBehavior.deferToChild,onPanDown: (details) {offset = details.globalPosition - Offset(height / 2, height / 2);overlayEntry!.markNeedsBuild();},onPanUpdate: (DragUpdateDetails details) {offset = offset + details.delta;overlayEntry!.markNeedsBuild();},onLongPress: () {overlayEntry!.remove();},child: Material(color: Colors.transparent,child: Container(height: height,width: height,alignment: Alignment.center,decoration: BoxDecoration(color: Colors.redAccent,borderRadius: BorderRadius.all(Radius.circular(height / 2))),child: const Text("长按\n移除",style: TextStyle(color: Colors.white),),),),);}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text("FloatingTouchDemoPage"),),body: Center(child: TextButton(onPressed: () {_showFloating();},child: const Text("show floating button"),),),);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 (12)物理层下面的传输媒体

前言 计算机网络物理层下面的传输媒体是计算机网络设备之间的物理通路&#xff0c;也称为传输介质或传输媒介&#xff0c;并不包含在计算机网络体系结构中&#xff0c;而是处于物理层之下。 一、传输媒体的分类 导向型媒体&#xff1a;电磁波被导引沿着固体媒体传播。常见的导向…

PPT画图——如何设置导致图片为600dpi

winr&#xff0c;输入regedit打开注册表 按路径找&#xff0c;HKEY_CURRENT_USER\Software\Microsoft\Office\XX.0\PowerPoint\Options&#xff08;xx为版本号&#xff0c;16.0 or 15.0或则其他&#xff09;。名称命名&#xff1a;ExportBitmapResolution 保存即可&#xff0c;…

接口测试的原则、用例与流程

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、接口的介绍 软件测试中&#xff0c;常说的接口有两种&#xff1a;图形用户接口&#xff08;GUI&#xff0c;人与程序的接口&#xff09;、应用程序编程接口…

Oracle 11G还有新BUG?ORACLE 表空间迷案!

前段时间遇到一个奇葩的问题&#xff0c;在开了SR和oracle support追踪两周以后才算是有了不算完美的结果&#xff0c;在这里整理出来给大家分享。 1.问题描述 12/13我司某基地MES全厂停线&#xff0c;系统卡死不可用&#xff0c;通知到我排查&#xff0c;查看alert log看到是…

测试冰淇淋模型

测试领域的冰淇淋模型&#xff08;Ice Cream Cone Model&#xff09;是一个相对于传统的测试金字塔模型的反转&#xff0c;是一种与经典金字塔模型相对的测试策略。在这种模型中&#xff0c;测试的分布和重点与传统金字塔模型相反。以下是冰淇淋模型的主要特点和原因&#xff1…

Quartz任务调度框架实现任务动态执行

说明&#xff1a;之前使用Quartz&#xff0c;都是写好Job&#xff0c;指定一个时间点&#xff0c;到点执行。最近有个需求&#xff0c;需要根据前端用户设置的时间点去执行&#xff0c;也就是说任务执行的时间点是动态变化的。本文介绍如何用Quartz任务调度框架实现任务动态执行…

HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口

1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript &#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具&#xff0c;可用于构建知识库&#xff0c;实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库&#xff0c;包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…

加载Tokenizer和基础模型的解析及文件介绍:from_pretrained到底加载了什么?

加载Tokenizer和基础模型的解析及文件介绍 在使用Hugging Face的transformers库加载Tokenizer和基础模型时&#xff0c;涉及到许多文件的调用和解析。这篇博客将详细介绍这些文件的功能和它们在加载过程中的作用&#xff0c;同时结合代码片段进行解析。 下图是我本地下载好模…

链式二叉树的基本操作,前序、中序以及后序遍历(递归实现,非递归实现)【有图解】

文章目录 结点设置二叉树的遍历前序、中序以及后序遍历 递归实现前序、中序以及后序遍历 非递归实现层序遍历 结点的个数叶子结点的个数第k层结点的个数值为x的结点树的最大深度二叉树的销毁 结点设置 既然是链式二叉树&#xff0c;那必须得有自己的结点类型&#xff0c;以下是…

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接&#xff1a;Docker Desktop release notes | Do…

3.若依前端项目拉取、部署、访问

因为默认RuoYi-Vue是使用的Vue2,所以需要另外去下载vue3来部署。 拉取代码 git clone https://gitee.com/ys-gitee/RuoYi-Vue3.git 安装node才能执行npm相关的命令 执行命令npm install 如果npm install比较慢的话&#xff0c;需要添加上国内镜像 npm install --registrhttp…

Docker安装体验kuboard-k8s多集群管理工具

文章目录 1.kuboard是什么&#xff1f;2.docker安装命令2.1 Linux上docker环境安装命令2.2 Windows上docker环境安装命令 3.登录访问3.1首页访问地址3.2 默认账号密码3.3 登录页3.4 首页 4总结 1.kuboard是什么&#xff1f; 参看官网: https://kuboard.cn/gitHub项目地址&…

重学设计模式-责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它通过将请求沿着链传递&#xff0c;使多个对象都有机会处理该请求&#xff0c;从而避免了请求的发送者与接收者之间的耦合关系。本文将详细介绍责任链模式的定义、优缺点、应…

SuperMap iClient3D for Cesium等高线标注

kele 前言 在三维地形分析中&#xff0c;等高线分析是一种非常重要的分析方法&#xff0c;它能直观的表达出地形的高低起伏特征&#xff0c;在三维系统中受到广泛应用。在SuperMap iClient3D for Cesium中&#xff0c;等高线分析是前端GPU分析&#xff0c;能够分析并渲染出等高…

简易共享屏幕工具改进版

昨天心血来潮写了一篇关于简易共享屏幕工具的文章&#xff0c;发现也有一些阅读量&#xff0c;并且我对于它的效果不是很满意 &#xff0c;实际呈现的帧率还是太低了。所以我今天换了更高效的方式来实现。 50 行代码简易屏幕共享工具 改进 降低分辨率 昨天那个测试的帧率低&a…

4.银河麒麟V10(ARM) 离线安装 MySQL

1. 系统版本 [rootga-sit-cssjgj-db-01u ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Lance)Kernel: 4.19.90-52.39.v2207.ky10.aarch64Build: Kylin Linux Advanced Server release V10 (SP3) /(La…

图像处理-Ch5-图像复原与重建

Ch5 图像复原 文章目录 Ch5 图像复原图像退化与复原(Image Degradation and Restoration)噪声模型(Noise Models)i.i.d.空间随机噪声(Generating Spatial Random Noise with a Specified Distribution)周期噪声(Periodic Noise)估计噪声参数(Estimating Noise Parameters) 在仅…

「下载」智慧园区及重点区域安全防范解决方案:框架统一规划,建设集成管理平台

智慧园区在基础设施建设和管理上仍存在诸多挑战。园区内场景碎片化、系统独立化、数据无交互、应用无联动等问题普遍存在&#xff0c;导致管理效率低下&#xff0c;安全隐患频发。 各安保系统如视频监控系统、报警管理系统、门禁管理系统等独立运行&#xff0c;数据不共享&…

LeetCode - Google 校招100题 第6天 回溯法(Backtracking) (8题)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144743505 LeetCode 合计最常见的 112 题: 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21题)校招100题 第3天 动态规划(DP) (20题)