iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Flutter构建自定义Widgets的方法是什么
  • 651
分享到

Flutter构建自定义Widgets的方法是什么

2023-06-26 05:06:59 651人浏览 八月长安
摘要

这篇文章主要讲解了“Flutter构建自定义Widgets的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flutter构建自定义Widgets的方法是什么”吧!一.组合widge

这篇文章主要讲解了“Flutter构建自定义Widgets的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flutter构建自定义Widgets的方法是什么”吧!

一.组合widget实现

Android和flutter自定义控件对比

Android中,一般会继承View或已经存在的某个控件,然后覆盖draw方法来实现自定义View。在Flutter中,一个自定义widget通常是通过组合其它widget来实现的,而不是继承。下面看看如何构建持有一个label的CustomButton。这是通过将Text与RaisedButton组合来实现的,而不是继承RaisedButton并重写其绘制方法实现,eg :custombuttontest.dart

import 'package:flutter/material.dart'; class CustomButtonTest extends StatelessWidget{  final String textStr;  CustomButtonTest(this.textStr);   @override  Widget build(BuildContext context) {    return RaisedButton(      onPressed: (){},      child: Text(        textStr,        textAlign: TextAlign.center,      )    );  } }

上面定义好组件之后,可直接在调用build的方法中现实,eg :

@override  Widget build(BuildContext context) {    return new Center(      child: new CustomButton("Custom Button"),    );  }}

二.通过自定义CustomPainter实现widgets

CustomPainter主要属性介绍,和Android开发中的自定义View类似,Flutter中的绘制也是依靠canvas和Paint来实现的

1).Canvas //画布,为开发者提供了点、线、矩形、圆形、嵌套矩形等绘制方法。

2).Paint //画笔,可以设置抗锯齿,画笔颜色,粗细,填充模式等属性,绘制时可以定义多个画笔以满足不同的绘制需求。eg:

Paint _paint = new Paint()..color = Colors.red // 画笔颜色 ..strokeCap = StrokeCap.round //画笔笔触类型,包括(1.round-画笔笔触呈半圆形轮廓开始和结束;2.butt-笔触开始和结束边缘平坦,没有外延;3.square-笔触开始和结束边缘平坦,向外延伸长度为画笔宽度的一半)..isAntiAlias = true //是否启动抗锯齿..style=PaintingStyle.fill //绘画风格,默认为填充,有fill和stroke两种..blendMode=BlendMode.exclusion //颜色混合模式..colorFilter=ColorFilter.mode(Colors.blueAccent, BlendMode.exclusion)//颜色渲染模式..maskFilter=MaskFilter.blur(BlurStyle.inner, 3.0)//模糊遮罩效果..filterQuality=FilterQuality.high//颜色渲染模式的质量..strokeWidth = 15.0;//画笔的宽度

3).Offset //坐标,可以用来表示某个点在画布中的坐标位置。

4).Rect //矩形,在图形的绘制中,一般都是分区域绘制的,这个区域一般都是一个矩形,在绘制中通常使用Rect来存储绘制的位置信息。

5).坐标系 //在Flutter中,坐标系原点(0,0)位于左上角,X轴向右变大,Y轴向下变大。

painting.dart中的主要方法,eg:

void drawRect(Rect rect, Paint paint) {...} //画矩形void drawLine(Offset p1, Offset p2, Paint paint) {...} //画线void drawPoints(PointMode pointMode, List<Offset> points, Paint paint) {...} //画点void drawCircle(Offset c, double radius, Paint paint) {...} //画圆void drawArc(Rect rect, double startAngle, double sweepAngle, bool useCenter, Paint paint) {...} //画圆弧

三.饼状图piechart.dart代码展示

import 'dart:math';import 'package:flutter/material.dart'; class PieChartTest extends StatelessWidget{  const PieChartTest({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: const Text('pie chart'),      ),      body:Container(        alignment: Alignment.center,        child: CustomPaint(          size: const Size(300, 300),          painter: PieChartPainter(),        ),      )    );  }} class PieChartPainter extends CustomPainter{   Paint getColoredPaint(Color color){    Paint paint=Paint();    paint.color=color;    return paint;  }   @override  void paint(Canvas canvas, Size size) {    double wheelSize=min(size.width, size.height)/2;    double nbElem=8;    double radius=(2*pi)/nbElem;    Rect boundingRect=Rect.fromCircle(center: Offset(wheelSize,wheelSize), radius: wheelSize);    canvas.drawArc(boundingRect, 0, radius, true, getColoredPaint(Colors.orange));    canvas.drawArc(boundingRect, radius, radius, true, getColoredPaint(Colors.black));    canvas.drawArc(boundingRect, radius*2, radius, true, getColoredPaint(Colors.green));    canvas.drawArc(boundingRect, radius*3, radius, true, getColoredPaint(Colors.red));    canvas.drawArc(boundingRect, radius*4, radius, true, getColoredPaint(Colors.blue));    canvas.drawArc(boundingRect, radius*5, radius, true, getColoredPaint(Colors.yellow));    canvas.drawArc(boundingRect, radius*6, radius, true, getColoredPaint(Colors.purple));    canvas.drawArc(boundingRect, radius*7, radius, true, getColoredPaint(Colors.white));  }   @override  bool shouldRepaint(covariant CustomPainter oldDelegate)=>oldDelegate!=this;}

四.实际效果图,eg:

Flutter构建自定义Widgets的方法是什么

附:Flutter中父widget调用子widget的方法

一、定义globalKey,注意<>中的是State类。

final _childWidgeTKEy = GlobalKey();

二、在父页面初始化子widget

ChildPage(key:_receiveKey),

三、

class ChildPage extends StatefulWidget {undefinedChildPage({Key key}) : super(key: key);@overrideChildPageState createState() => ChildPageState();}

四、在父界面调用子widget中的方法

_childWidgetKey.currentState.onRefresh();

感谢各位的阅读,以上就是“Flutter构建自定义Widgets的方法是什么”的内容了,经过本文的学习后,相信大家对Flutter构建自定义Widgets的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Flutter构建自定义Widgets的方法是什么

本文链接: https://www.lsjlt.com/news/306868.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter构建自定义Widgets的方法是什么
    这篇文章主要讲解了“Flutter构建自定义Widgets的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flutter构建自定义Widgets的方法是什么”吧!一.组合widge...
    99+
    2023-06-26
  • Flutter构建自定义Widgets的全过程记录
    目录一.组合widget实现二.通过自定义CustomPainter实现widgets三.饼状图piechart.dart代码展示四.实际效果图,eg:附:Flutter中父widg...
    99+
    2024-04-02
  • wpf自定义控件绑定结构体的方法是什么
    要在WPF中绑定结构体,可以使用以下方法:1. 创建一个继承自`DependencyObject`的自定义控件类,该类包含一个依赖属...
    99+
    2023-09-06
    wpf
  • 搭建spring自定义脚手架的方法是什么
    搭建Spring自定义脚手架的方法主要有以下步骤: 创建项目模板:根据项目需求,创建一个基础的项目模板,包括项目结构、配置文件、...
    99+
    2024-03-15
    spring
  • android自定义seekbar的方法是什么
    要自定义SeekBar,你可以使用xml布局文件和自定义的Style来实现。以下是一个简单的示例: 创建一个名为custom_se...
    99+
    2024-04-02
  • android自定义dialog的方法是什么
    Android中自定义Dialog的方法有以下几种:1. 创建一个继承自Dialog类的自定义对话框:- 创建一个新的类,继承自Di...
    99+
    2023-09-21
    android
  • Flutter自定义底部导航栏的方法
    本文实例为大家分享了Flutter自定义底部导航栏的具体代码,供大家参考,具体内容如下 文件结构: main.dart import 'package:flutter/materi...
    99+
    2024-04-02
  • Flutter实现自定义筛选框的方法
    本篇内容主要讲解“Flutter实现自定义筛选框的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flutter实现自定义筛选框的方法”吧!目录一、首先自定义筛选框的按钮视图,布局很简单,一个...
    99+
    2023-06-20
  • android自定义控件的方法是什么
    Android自定义控件的方法有以下几种:1. 继承系统控件:可以通过继承系统控件来进行扩展和定制。通过重写控件的绘制方法,修改控件...
    99+
    2023-08-16
    android
  • mysql自定义字段的方法是什么
    在MySQL中,可以通过以下两种方法来自定义字段:1. 使用计算字段:- 计算字段是使用表中已有字段计算出来的结果。可以使用算术运算...
    99+
    2023-09-25
    mysql
  • vue3自定义指令的方法是什么
    这篇文章主要介绍“vue3自定义指令的方法是什么”,在日常操作中,相信很多人在vue3自定义指令的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue3自定义指令的方法是什么”的疑惑有所帮助!接下来...
    99+
    2023-07-04
  • Java自定义异常的方法是什么
    本文小编为大家详细介绍“Java自定义异常的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java自定义异常的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、异常分为哪几种异常分为两种,分...
    99+
    2023-07-06
  • linux自定义信号的方法是什么
    在Linux中,可以使用以下方法来自定义信号:1. 使用`signal()`函数:可以使用`signal()`函数来设置信号处理程序...
    99+
    2023-08-12
    linux
  • mysql自定义函数的方法是什么
    在MySQL中,可以使用以下步骤来创建自定义函数:1. 创建函数:使用`CREATE FUNCTION`语句来创建函数,并指定函数的...
    99+
    2023-09-11
    mysql
  • qt自定义表格的方法是什么
    在Qt中,可以使用QTableView类来创建和操作表格。下面是一些自定义表格的方法:1. 设置表格模型:使用QStandardIt...
    99+
    2023-09-29
    qt
  • pgsql自定义排序的方法是什么
    在 PostgreSQL 中,可以通过创建自定义排序规则来实现自定义排序。以下是实现自定义排序的一般方法: 创建自定义排序规则函...
    99+
    2024-04-09
    pgsql
  • mfc自定义控件的方法是什么
    MFC(Microsoft Foundation Class)是一种用于开发Windows桌面应用程序的C++框架。MFC提供了一组...
    99+
    2023-09-07
    mfc
  • winform自定义控件的方法是什么
    要创建一个自定义控件,你需要按照以下步骤进行操作: 创建一个新的类并继承自System.Windows.Forms.Control...
    99+
    2024-04-09
    winform
  • vue3自定义指令方法是什么
    这篇文章主要讲解了“vue3自定义指令方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue3自定义指令方法是什么”吧!一、注册自定义指令以下实例都是实现一个输入框自动获取焦点的自定...
    99+
    2023-06-21
  • flink自定义触发器的方法是什么
    在 Flink 中自定义触发器需要实现 Trigger 接口,该接口定义如下: public interface Trigger&l...
    99+
    2024-03-07
    flink
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作