探索 Flutter 中的 NavigationRail:使用详解

1. 介绍

在 Flutter 中,NavigationRail 是一个垂直的导航栏组件,用于在应用程序中提供导航功能。它通常用于更大屏幕空间的设备,如平板电脑和桌面应用程序。NavigationRail 提供了一种直观的方式来浏览应用程序的不同部分,并允许用户轻松地切换页面或执行导航操作。

作用和特点:

  • 导航功能: NavigationRail 允许用户直观地导航应用程序的不同部分。通过点击导航栏中的选项,用户可以快速地切换到不同的页面或执行其他导航操作。

  • 垂直布局: NavigationRail 的垂直布局使其在平板电脑和桌面应用程序中尤其有用。在这些设备上,垂直导航栏可以更有效地利用屏幕空间,并提供更直观的用户体验。

  • 自定义外观: NavigationRail 允许开发人员根据应用程序的设计和品牌风格自定义导航栏的外观。您可以自定义背景颜色、选中项的颜色、图标和标签等。

  • 响应式设计: NavigationRail 支持响应式设计,可以适应不同尺寸和方向的屏幕。这使得它成为构建适用于多种设备和屏幕尺寸的应用程序的理想选择。

  • 高级功能: NavigationRail 提供了一些高级功能,如灵活的标签配置、自定义导航栏元素以及与页面切换组件的无缝集成,使开发人员能够创建功能丰富且易于使用的导航体验。

在下文中,我们将深入探讨 NavigationRail 的使用方法、最佳实践以及在实际应用中的应用场景,帮助您更好地利用这个强大的导航组件来构建出色的 Flutter 应用程序。

在这里插入图片描述

2. 安装和设置

在 Flutter 项目中使用 NavigationRail 非常简单,您只需按照以下步骤进行安装和设置即可:

  1. 添加依赖项
    在您的 Flutter 项目的 pubspec.yaml 文件中添加 flutter/material.dart 包。NavigationRail 是 Flutter SDK 的一部分,因此无需额外添加依赖项。
dependencies:
  flutter:
    sdk: flutter
  1. 导入包
    在您的 Dart 文件中导入 material.dart 包,以便使用 NavigationRail 组件。
import 'package:flutter/material.dart';
  1. 使用 NavigationRail
    在您的应用程序中使用 NavigationRail 组件来创建垂直导航栏。
class MyHomePage extends StatefulWidget {
  
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Navigation Rail Demo'),
      ),
      body: Row(
        children: <Widget>[
          NavigationRail(
            // 导航栏的配置属性
            // 例如 selectedIndex、onDestinationSelected 等
            // 可根据需要进行设置
          ),
          // 页面内容组件
        ],
      ),
    );
  }
}

通过以上步骤,您已经成功地将 NavigationRail 集成到您的 Flutter 项目中了。接下来,您可以根据需要对导航栏进行配置,例如设置选中项的索引、定义导航栏中的目标以及处理目标选中事件等。

3. 基本用法

NavigationRail 是 Flutter 中用于创建垂直导航栏的组件,它提供了一种直观的方式来导航应用程序的不同部分。以下是如何创建简单的 NavigationRail,并解释其关键属性的基本用法:

class MyHomePage extends StatefulWidget {
  
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _selectedIndex = 0; // 用于跟踪选中项的索引

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Navigation Rail Demo'),
      ),
      body: Row(
        children: <Widget>[
          NavigationRail(
            selectedIndex: _selectedIndex, // 设置选中项的索引
            onDestinationSelected: (int index) {
              setState(() {
                _selectedIndex = index; // 处理目标选中事件
              });
            },
            labelType: NavigationRailLabelType.all, // 显示所有标签
            destinations: [
              NavigationRailDestination(
                icon: Icon(Icons.home), // 导航栏项的图标
                label: Text('Home'), // 导航栏项的标签
              ),
              NavigationRailDestination(
                icon: Icon(Icons.person),
                label: Text('Profile'),
              ),
              // 添加其他导航栏项
            ],
          ),
          // 页面内容组件
          Expanded(
            child: Center(
              child: _getPage(_selectedIndex), // 根据选中项显示不同的页面内容
            ),
          ),
        ],
      ),
    );
  }

  Widget _getPage(int index) {
    switch (index) {
      case 0:
        return Center(child: Text('Home Page'));
      case 1:
        return Center(child: Text('Profile Page'));
      // 添加其他页面
      default:
        return Center(child: Text('Page not found'));
    }
  }
}

在上面的示例中,我们创建了一个简单的 NavigationRail,其中包含两个导航栏项:Home 和 Profile。通过设置 selectedIndex 属性来跟踪选中项的索引,并通过 onDestinationSelected 回调函数来处理选中项的变化。每个导航栏项使用 NavigationRailDestination 类来定义图标和标签。最后,根据选中的索引,显示不同的页面内容。

使用 labelType 属性可以定义导航栏标签的显示方式。在本例中,我们设置为 NavigationRailLabelType.all,表示显示所有标签,包括未选中的标签。

通过这个基本用法示例,您可以快速开始使用 NavigationRail 来构建具有导航功能的 Flutter 应用程序。根据您的需求,您可以添加更多的导航栏项,并根据需要自定义导航栏的外观和行为。

4. 自定义导航栏

NavigationRail 提供了许多自定义选项,使您能够根据应用程序的设计和品牌风格定制导航栏的外观。下面是如何自定义 NavigationRail 的外观以及如何提供自定义图标和标签的方法:

4.1 自定义导航栏外观

您可以通过以下方法来自定义 NavigationRail 的外观:

  • 背景色: 使用 backgroundColor 属性设置导航栏的背景色。
NavigationRail(
  backgroundColor: Colors.blueGrey, // 设置导航栏的背景色
  // 其他配置属性...
)
  • 选中项颜色: 使用 selectedIconTheme 属性设置选中项的图标主题,以及 selectedLabelTextStyle 属性设置选中项的标签文本样式。
NavigationRail(
  selectedIconTheme: IconThemeData(color: Colors.red), // 设置选中项的图标颜色
  selectedLabelTextStyle: TextStyle(color: Colors.red), // 设置选中项的标签文本颜色
  // 其他配置属性...
)
  • 未选中项颜色: 使用 unselectedIconTheme 属性设置未选中项的图标主题,以及 unselectedLabelTextStyle 属性设置未选中项的标签文本样式。
NavigationRail(
  unselectedIconTheme: IconThemeData(color: Colors.grey), // 设置未选中项的图标颜色
  unselectedLabelTextStyle: TextStyle(color: Colors.grey), // 设置未选中项的标签文本颜色
  // 其他配置属性...
)

4.2 自定义图标和标签

您可以通过以下方法自定义导航栏的图标和标签:

  • 自定义图标: 使用任何您喜欢的图标,例如 Flutter 自带的图标或自定义的图标。
NavigationRailDestination(
  icon: Icon(Icons.home), // 使用 Flutter 自带的图标
  // 或者
  icon: Icon(
    IconData(0xe8e6, fontFamily: 'MyCustomIcons'), // 使用自定义的图标
  ),
  // 其他属性...
)
  • 自定义标签: 使用 Text 组件自定义导航栏项的标签。
NavigationRailDestination(
  label: Text('Home'), // 自定义标签文本
  // 其他属性...
)

通过使用上述自定义选项,您可以轻松地根据应用程序的需求和设计风格定制 NavigationRail 的外观,并提供具有个性化标签和图标的导航栏。这样,您可以确保导航栏与应用程序的整体风格保持一致,并提供出色的用户体验。

5. 与页面切换结合

NavigationRail 通常与页面切换组件结合使用,例如 PageViewIndexedStack,以实现根据选定的导航栏项切换不同的页面内容。以下是如何将 NavigationRail 与 PageView 结合使用的解释和演示:

5.1 解释如何结合页面切换组件

  1. 使用 PageView PageView 组件允许用户在页面之间滑动,因此非常适合与 NavigationRail 结合使用。您可以在 PageView 中放置不同的页面,并根据导航栏的选定项切换页面。

  2. 使用 IndexedStack IndexedStack 组件允许同时显示多个子组件,并通过索引来确定哪个子组件应该可见。您可以将不同的页面放置在 IndexedStack 中,并根据导航栏的选定项设置索引来显示相应的页面。

5.2 演示如何根据选定的导航栏项切换页面内容

下面是一个简单的示例,演示如何将 NavigationRail 与 PageView 结合使用,并根据选定的导航栏项切换页面内容:

class MyHomePage extends StatefulWidget {
  
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _selectedIndex = 0;
  PageController _pageController = PageController(); // 页面控制器

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Navigation Rail Demo'),
      ),
      body: Row(
        children: <Widget>[
          NavigationRail(
            selectedIndex: _selectedIndex,
            onDestinationSelected: (int index) {
              setState(() {
                _selectedIndex = index;
                _pageController.jumpToPage(index); // 根据选定的导航栏项切换页面
              });
            },
            // 导航栏配置属性...
          ),
          Expanded(
            child: PageView(
              controller: _pageController,
              children: [
                Center(child: Text('Home Page')),
                Center(child: Text('Profile Page')),
                // 添加其他页面
              ],
            ),
          ),
        ],
      ),
    );
  }
}

在上面的示例中,我们创建了一个包含 NavigationRail 和 PageView 的界面。当用户点击导航栏中的选项时,onDestinationSelected 回调函数会被调用,并根据选定的索引来更新 _selectedIndex。然后,我们使用页面控制器 _pageController 来将 PageView 的当前页设置为选定的索引,从而切换到相应的页面。

通过这种方法,您可以实现根据选定的导航栏项切换不同的页面内容,为用户提供直观的导航体验。您还可以根据需要将其他页面添加到 PageView 中,以扩展应用程序的功能。

6. 响应式设计

在设计 Flutter 应用程序时,响应式设计是至关重要的,特别是在考虑到不同设备尺寸和方向的情况下。NavigationRail 作为一种用于导航的重要组件,需要在各种屏幕尺寸上进行适应。以下是在不同的屏幕尺寸上响应式地使用 NavigationRail 的一些最佳实践:

6.1 适应平板电脑、桌面和移动设备的最佳实践

  1. 使用媒体查询: 使用 MediaQuery 来检测当前设备的屏幕尺寸和方向,并相应地调整 NavigationRail 的布局和样式。
Widget build(BuildContext context) {
  final screenWidth = MediaQuery.of(context).size.width;
  final isDesktop = screenWidth > 600; // 适用于平板电脑和桌面

  return Scaffold(
    body: Row(
      children: <Widget>[
        // 在大屏幕上显示 NavigationRail
        if (isDesktop)
          NavigationRail(
            // 导航栏属性...
          ),
        // 页面内容组件
        Expanded(
          child: Center(
            // 页面内容...
          ),
        ),
      ],
    ),
  );
}
  1. 使用 Flexible 和 Expanded: 在 Row 布局中,将 NavigationRail 放置在 Flexible 组件中,并将页面内容放置在 Expanded 组件中,以确保页面内容可以占据剩余的空间。
Widget build(BuildContext context) {
  return Scaffold(
    body: Row(
      children: <Widget>[
        Flexible(
          flex: 1,
          child: NavigationRail(
            // 导航栏属性...
          ),
        ),
        Expanded(
          flex: 3,
          child: Center(
            // 页面内容...
          ),
        ),
      ],
    ),
  );
}
  1. 考虑横向布局: 对于横向屏幕方向的设备,如平板电脑和桌面,可以考虑将 NavigationRail 放置在页面的左侧或右侧,而不是顶部。
Widget build(BuildContext context) {
  final isLandscape = MediaQuery.of(context).orientation == Orientation.landscape;

  return Scaffold(
    body: isLandscape
      ? Row(
          children: <Widget>[
            // 在横向布局中,根据需求放置 NavigationRail
            NavigationRail(
              // 导航栏属性...
            ),
            // 页面内容...
          ],
        )
      : Column(
          children: <Widget>[
            // 在竖向布局中,将 NavigationRail 放置在顶部
            NavigationRail(
              // 导航栏属性...
            ),
            // 页面内容...
          ],
        ),
  );
}

通过以上最佳实践,您可以确保在不同的屏幕尺寸和方向下,NavigationRail 能够适应设备的布局,并提供一致的用户体验。根据您的应用程序需求和设计风格,可以灵活地调整布局和样式。

7. 高级功能

NavigationRail 不仅提供了基本的导航功能,还提供了一些高级功能,以增强用户体验并扩展导航栏的功能。以下是一些高级功能的探索和演示:

7.1 labelType 属性

labelType 属性用于定义导航栏标签的显示方式。NavigationRail 提供了三种 NavigationRailLabelType 枚举类型:

  • NavigationRailLabelType.none: 不显示标签。
  • NavigationRailLabelType.selected: 只在选中的导航栏项上显示标签。
  • NavigationRailLabelType.all: 在所有导航栏项上都显示标签。
NavigationRail(
  labelType: NavigationRailLabelType.selected, // 只在选中项上显示标签
  // 其他配置属性...
)

7.2 leading 和 trailing 属性

leadingtrailing 属性允许在导航栏中添加额外的元素,可以是图标、按钮或其他小部件。通常,leading 用于在导航栏的顶部添加元素,而 trailing 则用于在底部添加元素。

NavigationRail(
  leading: Icon(Icons.menu), // 在导航栏顶部添加图标
  trailing: Icon(Icons.search), // 在导航栏底部添加图标
  // 其他配置属性...
)

7.3 实现导航栏中的额外元素

您可以使用 leadingtrailing 属性来实现在导航栏中添加额外的元素,例如标签、按钮或其他自定义小部件。以下是一个示例,演示如何在导航栏的顶部添加一个按钮,并在底部添加一个文本标签:

NavigationRail(
  leading: IconButton(
    icon: Icon(Icons.menu),
    onPressed: () {
      // 处理导航栏顶部按钮点击事件
    },
  ),
  trailing: Text('Settings'), // 在导航栏底部添加文本标签
  // 其他配置属性...
)

通过使用高级功能,您可以增强导航栏的功能和外观,为用户提供更丰富的导航体验。您可以根据应用程序的需求和设计风格,自由地定制导航栏,并添加所需的额外元素。

8. 案例研究

NavigationRail 是一个灵活的导航组件,在许多实际应用中都可以发挥重要作用。以下是一个使用 NavigationRail 的案例研究,展示其在实际应用中的应用场景:

案例:健康监测应用

背景: 健康监测应用是一种用于跟踪用户健康数据和提供个性化建议的应用程序。用户可以查看各种健康指标,如步数、心率、睡眠质量等,并根据这些数据了解自己的健康状况。

NavigationRail 的应用: 在健康监测应用中,NavigationRail 可以用作主要的导航方式,让用户轻松地访问各个健康数据模块。以下是 NavigationRail 在健康监测应用中的一些应用场景:

  1. 导航栏项: NavigationRail 的每个导航栏项可以代表一个健康数据模块,如步数、心率、睡眠等。用户可以通过点击导航栏项来切换到相应的健康数据页面。

  2. 自定义图标和标签: 每个导航栏项可以使用自定义的图标和标签,以便用户更容易识别和理解各个健康数据模块。

  3. 页面切换: NavigationRail 可以与 PageViewIndexedStack 结合使用,以实现根据选定的导航栏项切换页面内容。用户可以通过滑动页面或点击导航栏项来浏览各个健康数据页面。

  4. 响应式设计: 应用程序可以根据不同设备的屏幕尺寸和方向来调整 NavigationRail 的布局和样式,以确保在各种设备上提供一致的用户体验。

总结: 在健康监测应用中,NavigationRail 提供了一个直观的导航方式,让用户可以轻松地访问和浏览各个健康数据模块。通过其灵活的配置选项和响应式设计,NavigationRail 可以有效地增强健康监测应用的导航体验,提升用户满意度和应用的实用性。

9. 总结

NavigationRail 是 Flutter 中用于创建垂直导航栏的组件,具有以下主要优势和用法:

  • 直观的导航体验: NavigationRail 提供了直观的导航方式,让用户可以轻松地切换应用程序的不同部分或执行导航操作。

  • 灵活的自定义选项: NavigationRail 提供了丰富的自定义选项,包括背景色、选中项的颜色、标签类型等,使开发人员可以根据应用程序的设计和品牌风格定制导航栏的外观。

  • 与页面切换组件的无缝集成: NavigationRail 可以与页面切换组件(如 PageViewIndexedStack)结合使用,以实现根据选定的导航栏项切换不同的页面内容,从而提供更丰富的用户体验。

  • 响应式设计支持: NavigationRail 支持响应式设计,可以根据不同设备的屏幕尺寸和方向调整布局和样式,以确保在各种设备上提供一致的用户体验。

  • 提高用户满意度: NavigationRail 可以增强应用程序的导航体验,提高用户的满意度和使用体验,从而增强应用的实用性和吸引力。

进一步学习和探索的资源链接

如果您想进一步学习和探索 NavigationRail 的更多信息和用法,以下是一些官方文档和资源链接:

  1. NavigationRail 类文档:Flutter 官方文档中关于 NavigationRail 类的详细说明,包括属性、方法和示例。

  2. Flutter 导航和路由文档:Flutter 官方文档中关于导航和路由的详细指南,可帮助您更好地理解 Flutter 中导航的概念和实现方式。

  3. Flutter Cookbook 中的 NavigationRail 示例:Flutter Cookbook 中关于 NavigationRail 的示例,提供了一些常见的用法和最佳实践。

  4. Flutter 示例应用:Flutter 提供的示例应用程序,包含了许多不同组件的使用示例,您可以从中学习和探索 NavigationRail 的用法。

通过阅读以上资源,并尝试在您的应用程序中应用 NavigationRail,您将更好地掌握 NavigationRail 的用法和技巧,从而构建出色的 Flutter 应用程序。

10. 附录

在这个附录中,我们将提供一些额外的信息,包括常见问题解答和最佳实践建议,帮助您更好地理解和使用 NavigationRail。

常见问题解答

Q: NavigationRail 如何处理超出屏幕宽度的导航项?
A: 当导航项超出屏幕宽度时,NavigationRail 会自动在侧边添加一个滚动条,用户可以通过滚动来查看所有导航项。

Q: 我应该何时使用 NavigationRail?
A: NavigationRail 适用于需要在应用程序中提供导航功能的情况,特别是对于平板电脑和桌面应用程序。它提供了一种直观的方式来浏览不同部分或执行导航操作。

最佳实践建议

  • 保持导航栏简洁明了: 尽量避免在 NavigationRail 中放置过多的导航项,保持导航栏的简洁和清晰,以提供更好的用户体验。

  • 注意响应式设计: 在设计 NavigationRail 时,请务必考虑不同设备和屏幕尺寸的响应式布局,以确保在各种设备上都能提供良好的用户体验。

  • 注意可访问性: 确保 NavigationRail 中的导航项和其他元素都易于访问,尤其是对于视觉障碍用户。考虑使用适当的语义标签和颜色对比度。

  • 测试与迭代: 在发布应用程序之前,进行全面的测试,并根据用户反馈进行必要的迭代和改进,以确保 NavigationRail 的功能和性能符合预期。

通过遵循这些最佳实践建议,您可以更好地利用 NavigationRail,为您的应用程序提供出色的导航体验,并确保用户满意度和应用的实用性。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

适合马犬吃的狗粮有哪些?

亲爱的朋友们&#xff0c;你们是不是也在为家里的马犬挑选合适的狗粮而犯愁呢&#xff1f;&#x1f436;&#x1f35a; 今天&#xff0c;我就来和大家分享一下适合马犬吃的狗粮有哪些&#xff0c;以及为什么我要特别推荐福派斯鲜肉无谷狗粮。 首先&#xff0c;我们得了解马犬的…

深入理解Redis的Sentinel机制

Sentinel简述 Sentinel为了解决什么问题&#xff1f; Sentinel&#xff08;哨岗、哨兵&#xff09;是Redis的高可用性&#xff08;high availability&#xff09;解决方案。 我们知道Redis 的主从复制模式可以将主节点的数据改变同步给从节点&#xff0c;这样从节点就可以起…

c语言——通讯录(文件版)

大家好我是小锋&#xff0c;今天我们来实现一个通讯录 准备工作 为了让我们的代码具有条理我们要建立三个文件一个文件用来放头文件一个文件用来放函数的实现&#xff0c;一个文件用来实现通讯录的基本逻辑。 然后我们其他的.c文件要使用头文件时我们要用# include<tongxu…

一笔画--PTA

文章目录 题目描述思路AC代码 题目描述 输入样例1 3 2 1 2 2 3 输出样例1 Y输入样例2 4 3 1 2 1 3 1 4 输出样例2 N输入样例3 1 0 输出样例3 Y思路 dfs 、欧拉通路、欧拉回路的判定 前导知识 欧拉通路、欧拉回路、欧拉图 无向图&#xff1a; ①设G是连通无向图&#xff0c;则称…

pycharm免费下载安装教程

pycharm下载地址 Download PyCharm: The Python IDE for data science and web development by JetBrains 1.进入官网之后可以下拉到最底下&#xff0c;可以设置一下所属地是中国大陆&#xff08;China Mainland)&#xff0c;这样在安装的时候展示的就是中文。 2.设置好语言之…

一个单生产-多消费模式下无锁方案(ygluu/卢益贵)

一个单生产-多消费模式下无锁方案 ygluu/卢益贵 关键词&#xff1a;生产者-消费者模型、无锁队列、golang、RWMutex 本文介绍一个“单生产(低频)-多消费”模式下的无锁哈希类方案&#xff0c;这个方案的性能优于golang的RWMutex&#xff0c;因为它永远不会因为“写”而导致与…

Java代码基础算法练习-数位交换-2024.03.23·

任务描述&#xff1a; 输入一个三位整数&#xff0c;将其个位和百位交换后输出 任务要求&#xff1a; package march0317_0331;import java.util.Scanner;public class m240323 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out…

家用路由器和企业路由器的区别?

一、家用路由器 家用路由器路由器交换机 它只有一个WAN口和一个LAN口&#xff0c;WAN口接公网一个地址&#xff0c;LAN口接你电脑一个IP地址&#xff0c;完全符合路由器的设计&#xff0c;而因为家里如果用了&#xff0c;说明要接多个电脑&#xff0c;那么如果还需要对每个接口…

查立得源码如何去除版权

最近发现很多人百度&#xff1a;查立得源码如何去除版权。 每个源代码/软件都是有版权的&#xff0c;无法去除&#xff0c;我们也得尊重知识产权/劳动成果。 可以去除/修改的是&#xff1a;页面显示的版权信息,查立得底部信息均可自定义(一般conn.php可修改)。 另&#xff1…

FFmepg--AVFilter过滤器使用以及yuv视频裁剪

文章目录 AVFilter 流程:api核心代码变量yuv视频裁剪AVFilter 流程: ⾸先使⽤split滤波器将input流分成两路流(main和tmp),然后分别对两路流进⾏处理。对于tmp流,先经过crop滤波器进⾏裁剪处理,再经过flip滤波器进⾏垂直⽅向上的翻转操作,输出的结果命名为flip流。再将…

浮点数在内存中的存储

目录 一.回顾&#xff1a;整数在内存中的存储 二.大小端字节序和字节序的判断 什么是大小端 &#xff1f; 为什么需要有大小端之分呢&#xff1f; 判断当前机器的字节序 三.练习 四.浮点数在内存中的存储 数字M 数字E 浮点数取的过程 E不全为0或者E不全为1 E全为0 E…

Spring Cloud二:核心组件解析

在微服务架构中&#xff0c;Spring Cloud凭借其强大的组件集合&#xff0c;为开发者提供了从服务注册与发现、负载均衡、服务调用到分布式跟踪与日志等全方位的支持。本文将深入解析Spring Cloud的核心组件&#xff0c;通过源码分析和示例代码&#xff0c;帮助读者更好地理解这…

手机实时监控电脑屏幕(手机可以看到电脑在干什么吗)

已经2024年了&#xff0c;假如你还在问我&#xff0c;手机可以看到电脑在干什么吗&#xff0c;有没有手机实时监控电脑屏幕的系统。 那么证明&#xff0c;你可能已经out 了。 现代科技告诉发展的态势下&#xff0c;这种技术已经很成熟了。 域智盾软件就可以实现这种效果↓我们…

『K8S 入门』三:资源调度

『K8S 入门』三&#xff1a;资源调度 一、Label 和 Selector 可以通过 Selector 基于 Label 匹配需要的资源 Label 标签 配置文件中&#xff08;metadata.labels&#xff09;配置 metadata: # Pod相关的元数据&#xff0c;用于描述Pod的数据name: nginx-demo #Pod的名称lab…

微信小程序使用动态ICON让小程序活起来。使用曲线救国方式,非常有效

扫码查看动画效果 当前使用的微信小程序是Skyline模式。webview一样可以使用&#xff0c;而且能更高效的直接替换URL使用。但是由于性能问题&#xff0c;建议在Skyline模式下使用&#xff01; 1、挑选喜欢的ICON 动态ICON官网&#xff1a;18,700 Animated Icons - Lordicon …

MySQL---视图

目录 一、介绍 二、语法 三、视图的更新 四、视图作用 一、介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#…

Stable Diffusion实现光影字效果

昨天下午有人在群里发光影图片&#xff0c;大家都觉得很酷&#xff0c;我没怎么在意。直到早上我在小红书看到有人发同款图片&#xff0c;只是一晚上的时间点赞就超过了8000&#xff0c;而且评论数也很高&#xff0c;也可以做文字定制变现。研究了一下发现这个效果不难实现&…

AbstractQueuedSynchronizer 独占式源码阅读

概述 ● 一个int成员变量 state 表示同步状态 ● 通过内置的FIFO队列来完成资源获取线程的排队工作 属性 AbstractQueuedSynchronizer属性 /*** 同步队列的头节点 */private transient volatile Node head;/*** 同步队列尾节点&#xff0c;enq 加入*/private transient …

docker 数据卷 (二)

1&#xff0c;为什么使用数据卷 卷是在一个或多个容器内被选定的目录&#xff0c;为docker提供持久化数据或共享数据&#xff0c;是docker存储容器生成和使用的数据的首选机制。对卷的修改会直接生效&#xff0c;当提交或创建镜像时&#xff0c;卷不被包括在镜像中。 总结为两…

ctfshow web入门 反序列化

254 分析代码&#xff1a; 如果用户名和密码参数都存在&#xff0c;脚本会创建一个 ctfShowUser 类的实例 $user。 接着&#xff0c;调用 $user->login($username, $password) 方法尝试登录。如果登录成功&#xff08;即用户名和密码与类中的默认值匹配&#xff09;&#…