【第五章 flutter学习之flutter进阶组件-上篇】

这篇具有很好参考价值的文章主要介绍了【第五章 flutter学习之flutter进阶组件-上篇】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、列表组件

1.常规列表

【第五章 flutter学习之flutter进阶组件-上篇】,flutter,学习

 children: const <Widget>[
        ListTile(
          leading: Icon(
            Icons.airplay,
            color: Color.fromARGB(255, 89, 54, 244),
          ),
          title: Text("我是标题2", style: TextStyle(fontSize: 20)),
          subtitle: Text("内容", style: TextStyle(fontSize: 16)),
          trailing: Icon(Icons.access_time_sharp),
        ),
      ],

children可以复制多个组成列表


设置纵向列表方向

class MyHome extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
        height: 800.0,
        margin: EdgeInsets.all(5),
        child: ListView(
          //设置列表为水平列表
          scrollDirection: Axis.horizontal,
          children: <Widget>[
            Container(
              width: 100.0,
              color: Colors.lightBlue,
              child: ListView(children: [Text("WWWW")]),
            ),
            Container(
              width: 180.0,
              color: Colors.deepPurpleAccent,
            ),
          ],
        ));
  }
}

【第五章 flutter学习之flutter进阶组件-上篇】,flutter,学习

2.动态列表

Flutter动态列表可以通过ListView.builder或ListView.separated来实现。
如下例

List<String> items = ['Item 1', 'Item 2', 'Item 3'];

ListView.builder(
  itemCount: items.length,
  itemBuilder: (BuildContext context, int index) {
    return ListTile(
      title: Text(items[index]),
    );
  },
)

二、FridView组件

Filutter 是一个开源的 JavaScript 库,用于创建和管理可过滤和可排序的数据表。FridView 是 Filutter 库中的一个组件,用于在数据表中显示数据行。FridView 组件具有以下特点:

响应式设计:FridView 组件可以自适应不同屏幕大小,确保在各种设备上显示效果良好。

虚拟滚动:当数据量很大时,FridView 组件会使用虚拟滚动技术,只渲染当前可见区域的数据行,从而提高渲染性能。

可定制:FridView 组件提供了丰富的配置选项和事件回调,可以根据需求进行定制。

键盘和触摸支持:FridView 组件支持使用键盘和触摸设备进行导航和操作。

筛选和排序:FridView 组件可以与 Filutter 的其他组件(如 FilterBar 和 SortBy)结合使用,实现数据的筛选和排序功能。

三、Stack层叠组件

在Flutter中,Stack层叠组件用于堆叠多个子组件,使得它们按照堆叠顺序相互叠加。这使得您可以轻松地创建复杂的布局,如重叠的图片、按钮等。要在Flutter中使用Stack组件,请遵循以下步骤:

导入Flutter库:

import ‘package:flutter/material.dart’;

在您的代码中创建一个Stack组件,并添加一个或多个子组件。子组件将按照添加到Stack中的顺序堆叠。例如:

Stack(
  children: [
    Container(
      color: Colors.blue,
      child: Text('First'),
    ),
    Container(
      color: Colors.red,
      child: Text('Second'),
    ),
    Container(
      color: Colors.green,
      child: Text('Third'),
    ),
  ],
)

在这个例子中,我们创建了一个包含三个Container的Stack。每个Container都有一个不同的背景颜色和文本。这些Container将按照堆叠顺序显示。

根据需要,可以使用Positioned组件来定位子组件。Positioned组件允许您指定子组件在Stack中的位置。例如,将第二个Container定位在Stack的左上角:

Stack(
  children: [
    Container(
      color: Colors.blue,
      child: Text('First'),
    ),
    Positioned(
      top: 10,
      left: 10,
      child: Container(
        color: Colors.red,
        child: Text('Second'),
      ),
    ),
    Container(
      color: Colors.green,
      child: Text('Third'),
    ),
  ],
)

在这个例子中,我们使用了Positioned组件来定位第二个Container。这样,它将显示在第一个Container的左上角。

您可以根据需要调整Stack组件的属性,例如alignment、fit等。例如,将Stack的对齐方式设置为居中:

Stack(
  alignment: Alignment.center,
  children: [
    // ...
  ],
)

通过这些步骤,您可以在Flutter中使用Stack组件来创建复杂的布局。

四、AspectRatio Card CircleAvatar组件

AspectRatio、Card 和 CircleAvatar 是 Flutter 中的三个组件,它们通常一起使用以创建一个具有特定形状和比例的圆形头像。
下面是如何将它们组合在一起创建一个圆形头像组件的示例

首先,确保你已经在你的 Flutter 项目中引入了所需的包:

import ‘package:flutter/material.dart’;

创建一个名为 CircleAvatarWithAspectRatio 的新组件,它将包含 AspectRatio 和 CircleAvatar:

class CircleAvatarWithAspectRatio extends StatelessWidget {
  final String imageUrl;
  final double radius;

  const CircleAvatarWithAspectRatio({
    Key? key,
    required this.imageUrl,
    this.radius = 50.0,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return AspectRatio(
      aspectRatio: 1,
      child: ClipRRect(
        borderRadius: BorderRadius.circular(radius),
        child: ***work(
          imageUrl,
          fit: BoxFit.cover,
        ),
      ),
    );
  }
}

在你的主界面(例如,main.dart)中,使用 CircleAvatarWithAspectRatio 组件:

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: Center(
          child: CircleAvatarWithAspectRatio(
            imageUrl: '***',
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个名为 CircleAvatarWithAspectRatio 的新组件,它包含一个 AspectRatio 组件,用于确保头像具有正方形形状(即宽度等于高度)。然后,我们使用 ClipRRect 组件将头像裁剪成圆形,并使用 ***work 组件加载网络图片。最后,我们在主界面中使用 CircleAvatarWithAspectRatio 组件来显示头像。

五、按钮组件

在 Flutter 中,按钮组件(Button)是一个非常重要的组件,用于响应用户的点击操作。

在 Flutter 中,你可以使用 ElevatedButton、OutlineButton、TextButton、IconButton 等多种类型的按钮。下面是一个简单的 Flutter 按钮组件示例:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Button Example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Button Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              print('Button pressed!');
            },
            child: Text('Click me!'),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们首先导入了 flutter/material.dart,然后创建了一个名为 MyApp 的 StatelessWidget。在 build 方法中,我们创建了一个 MaterialApp,其中包含一个 Scaffold。在 Scaffold 中,我们添加了一个居中的 ElevatedButton,点击时将打印 “Button pressed!”。

你可以根据需要自定义按钮的样式、颜色、大小和文本等属性。Flutter 提供了丰富的组件和属性,可以满足各种应用程序的 UI 需求。

六、Stack组件

Flutter Stack组件是一个用于堆叠多个子组件的容器,允许在z轴方向上叠加子组件。这使得子组件可以相互重叠,从而创建出丰富的视觉效果。Stack组件具有以下特点:

灵活性:Stack组件允许您根据需要调整子组件的大小、位置和顺序。
高度自定义:Stack组件允许您使用各种装饰器和定位器来调整子组件的外观和行为。
性能优化:Flutter引擎对Stack组件进行了优化,使其在渲染大量子组件时表现良好。
以下是一个简单的Flutter Stack组件示例:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Stack Example',
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter Stack Example')),
        body: StackExample(),
      ),
    );
  }
}

class StackExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Container(
          height: 200,
          width: 200,
          color: Colors.red,
        ),
        Positioned(
          top: 10,
          left: 10,
          child: Container(
            height: 100,
            width: 100,
            color: Colors.blue,
          ),
        ),
        Positioned(
          bottom: 10,
          right: 10,
          child: Container(
            height: 50,
            width: 50,
            color: Colors.green,
          ),
        ),
      ],
    );
  }
}

在这个示例中,我们创建了一个包含三个子组件的Stack:一个红色的正方形、一个蓝色的矩形和一个绿色的圆形。我们使用Positioned组件来指定每个子组件在Stack中的位置。

七、Wrap组件

filutter 是一个虚构的库,但我们可以假设它包含了一个名为 Wrap 的组件。在许多库和框架中,Wrap 组件通常用于包装其他组件,以实现特定的布局或样式。以下是一个虚构的 filutter Wrap 组件的示例,使用 React 和 TypeScript 编写:

typescript
import React from 'react';

interface WrapProps {
  children: React.ReactNode;
  direction?: 'horizontal' | 'vertical';
  spacing?: number;
  align?: 'flex-start' | 'center' | 'flex-end';
}

const Wrap: React.FC<WrapProps> = ({
  children,
  direction = 'horizontal',
  spacing = 0,
  align = 'flex-start',
}) => {
  const style: React.CSSProperties = {
    display: 'flex',
    flexDirection: direction,
    alignItems: align,
    justifyContent: align,
  };

  return (
    <div style={style}>
      {React.Children.map(children, (child, index) => (
        <div style={{ margin: spacing }}>{child}</div>
      ))}
    </div>
  );
};

export default Wrap;

这个虚构的 filutter Wrap 组件接受以下属性:

children:要包装的子组件。
direction:布局方向,可以是 ‘horizontal’ (默认) 或 ‘vertical’。
spacing:组件之间的间距,默认为 0。
align:对齐方式,可以是 ‘flex-start’ (默认)、‘center’ 或 ‘flex-end’。
组件使用 CSS 样式将子组件包装在 flex 容器中,并根据提供的属性设置布局方向、间距和对齐方式。你可以根据实际需求调整这个例子以适应你的需求。

八、StatefulWidget有状态组件

StatefulWidget 是一种特殊的 Widget,它可以拥有可变的状态。这种组件通常用于需要处理用户交互、动画或其他需要更新状态的场景。要创建一个有状态组件,需要继承 StatefulWidget 类并实现 createState 方法,以创建一个与之关联的 State 对象。

以下是一个简单的有状态组件示例:

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text('点击次数:$_counter'),
      alignment: Alignment.center,
      color: Colors.blue,
    );
  }
}

在这个例子中,我们创建了一个名为 MyStatefulWidget 的有状态组件。它包含一个名为 _MyStatefulWidgetState 的内部类,该类实现了 State 类。我们为这个组件添加了一个名为 _counter 的变量来跟踪点击次数。

在 _incrementCounter 方法中,我们使用 setState 方法来更新组件的状态。当状态发生变化时,Flutter 会重新构建组件,并调用 build 方法。在这个例子中,我们使用 Text Widget 来显示点击次数,并使用 Container Widget 来设置背景颜色和文本对齐方式。

要使用这个有状态组件,只需在 Flutter 应用中的 build 方法中引用它即可。文章来源地址https://www.toymoban.com/news/detail-633763.html


总结

到了这里,关于【第五章 flutter学习之flutter进阶组件-上篇】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 统计学习方法第五章——决策树

    decision tree决策树是一种分类和回归的方法,本章只考虑在分类领域的使用。决策树使用了归纳法划分特征空间,以此来达到分类的目的。决策树不同于KNN中的kd树,它是多叉树,不是二叉树。决策树是一种概率模型。 决策树采用了if-then规则,路径上的内部节点是对特征的分

    2024年02月05日
    浏览(28)
  • 第五章 数据分析模型 题目学习(40%)

    主成分的计算步骤:1、主成分建模,标准化处理。2、计算特征根、特征向量。3、选取主成分个数。  选择B,依次递减。  相关系数和关联矩阵都做了标准化,做完标准化后方差就不会造成影响,所以选A。  A可以进行判断,虽然没讲过但是可以。BC是正常概念。D没说过。

    2024年02月09日
    浏览(31)
  • 【第四章 flutter学习之flutter基础组件】

    android、ios各自平台的资源文件 lib 项目目录 linux macos PC平台资源文件 web web平台资源文件 其他的基本上是一些配置文件 pubspec.yaml 配置文件类似vue中的json 核心文件是main.dart文件 首先我们先清空main.dart文件 引入主题 import ‘package:flutter/material.dart’; 定义入口方法 用来调用组件

    2024年02月15日
    浏览(41)
  • 【一起啃书】《机器学习》第五章 神经网络

    第五章 神经网络 5.1 神经元模型   神经网络是由具有适应性简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应,神经网络中最基本的成分是神经元模型,以下为第一个神经元数学模型——M-P神经元模型。   在这个模

    2024年02月06日
    浏览(27)
  • 《Flink学习笔记》——第五章 DataStream API

    一个Flink程序,其实就是对DataStream的各种转换,代码基本可以由以下几部分构成: 获取执行环境 读取数据源 定义对DataStream的转换操作 输出 触发程序执行 获取执行环境和触发程序执行都属于对执行环境的操作,那么其构成可以用下图表示: 其核心部分就是Transform,对数据

    2024年02月10日
    浏览(33)
  • ROS高效进阶第五章 -- 机器人语音交互之ros集成科大讯飞中文语音库,实现语音控制机器人小车

    从本文开始,我们将用两篇文章学习机器人语音交互。本文作为第一篇,将在ros上集成科大讯飞的中文语音库,实现语音控制机器人小车运动。至于语音识别和语音合成的原理,本文并不深究,读者可以自行搜索相关的文章介绍。这里提醒,本文的测试环境是ubuntu20.04 + ros

    2024年02月04日
    浏览(53)
  • 【Rust】Rust学习 第五章使用结构体组织相关联的数据

    定义结构体,需要使用  struct  并为整个结构体提供一个名字。结构体的名字需要描述它所组合的数据的意义。接着,在大括号中,定义每一部分数据的名字和类型,我们称为  字段 ( field )。 实例化(不可变变量) 可变变量 字段初始化简写语法 通过已经存着的变

    2024年02月13日
    浏览(38)
  • (CDA数据分析师学习笔记)第五章多维数据透视分析一

    商业智能报表:BI报表。 ETL: 全称 Extract-Transform-Load ,即提取(extract)、转换(transform)、加载(load)。 E 是第一步对源数据进行抽取,源数据主要来源于业务系统、文件数据、第三方数据。T是第二步,对数据进行适当处理,目的是为了下一步的加载。主要是筛选(有价值

    2024年04月11日
    浏览(33)
  • 数据结构(c++语言版) 邓俊辉 第五章:二叉树学习笔记

    5.1二叉树及其表示         树是由节点和边组成的。 1.有根树         树是由顶点(vertex)和边(edge)组成。树的每个顶点也叫节点(node)。 2.深度与层次         由树的连通性,每一节点与根都有一条路径相连:根据树的无环性,由根通往每个节点的路径必然唯一。  

    2024年02月13日
    浏览(34)
  • 《十堂课学习 Flink》第五章:Table API 以及 Flink SQL 入门

    第四章中介绍了 DataStream API 以及 DataSet API 的入门案例,本章开始介绍 Table API 以及基于此的高层应用 Flink SQL 的基础。 Flink 提供了两个关系API——Table API 和 SQL——用于统一的流和批处理。Table API 是一种针对Java、Scala和Python的语言集成查询API,它允许以非常直观的方式组合来

    2024年02月03日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包