基础widgets

1.widgets_文本和字体

flutter当中几乎所有的对象都是widget,他跟原生开发的控线不一样,flutter开发当中,widget的概念更广泛一点,
不仅可以表示ui元素,也可以表示一些功能性的组件,例如手势检测等

  • 基础组件
    1. 文本和字体
      对于html当中对应就是lab或者label或者span这样的行内元素
      在这里插入图片描述
      在这里插入图片描述

2.widgets_按钮

在这里插入图片描述

3.widgets_图片和图标

图片

  1. 加载本地资源
  2. 加载网络资源

Widget build(BuildContext context) {
	const style = TextStyle(
		color:const Color(0xffff0000),//Colors.yellow
		fontSize:20,
		fontFamily:'yahei',
		decoration: TextDecoration.underline,
		decorationStyle: TextDecorationStyle.dashed
	);
	return Scaffold(
		appBar: AppBar(
			title: Text('Hello world!'),
			actions: <Widget>[
				IconButton(
					icon: Icon(Icons.shopping cart),
					tooltip: 'Open shopping cart',
					onPressed: () {
						print('Shopping cart opened')
					},
				),
			],
		),
		body:Column(
			children: <Widget>[
				Image.asset(static/pircture/mvp.png,
				width:200,
				)//放图片路径,可以右击文件然后新建一个文件夹放图片
			]
		)
	)
}

这边要解开
在这里插入图片描述

  • 如果想加载网络图片
//network代表要使用网络资源
Image.network("http://......",
width:150)
//控制图片填充效果
fit:BoxFit.cover
//设定颜色混合(拿别的颜色混到图片里去)
color:Color.pink,
colorBlendMode:BlendMode.difference,

在这里插入图片描述

图标

  • 使用icon这个类
Icon(Icons.access_alarm)//闹铃图标

在这里插入图片描述

  • 如果图标不够用了,想使用一个新的图标,可以支持icon font(淘宝的矢量图标库)
    在这里插入图片描述
  • 解压缩包,找到ttf文件,就是我们要使用库
    在这里插入图片描述
  • 在pubspec中引入 在这里插入图片描述
  • 新建一个文件fonts来引入路径
  • 定义一个自己的图标库,在lib中定义一个Dart File文件叫Myicon.dart
import 'package:flutter/material.dart';
class MyIcon [
	static const IconData huawei = const IconData(
		0xe82e,
		fontFamily:'myGoodIcon',
		matchTextDirection: true
	);
	static const IconData oppo = const IconData(
		0xe82d,
		fontFamily:'myGoodIcon',
		matchTextDirection: true
	);
	static const IconData xiaomi= const IconData(
		0x832,
		fontFamily:'myGoodIcon',
		matchTextDirection: true
	);
]
  • 写完上面代码后,到main.dart文件中引入
import 'MYIcon.dart'
  • 然后就可以直接用了
    在这里插入图片描述
  • 可以设置颜色
Icon(MyIcon.huawei,color:Color.yellow)
  • pub里面报错的话,可能是缩进问题
    在这里插入图片描述

3.widgets_下拉框

  • 下拉框里面有选项,有选项的话还需要知道选的是第几个,这才是一个正真的下拉框
class MyDropDownButton extends StatefulWidgets {
	
	State<StatefulWidget> createState() {
 		return _MyDropDownButton();
	}
}

class _MyDropDownButton extends State<MyDropDownButton> {
	List getCityList() [
		List<DropdownMeunItem> cityList = new List();
		cityList.add(DropdownMenuItem(child: new Text("上海"), value:"shanghai"));
		cityList.add(DropdownMenuItem(child: new Text("北京"), value:"beijing"));
		cityList.add(DropdownMenuItem(child: new Text("广州"), value:"guangzhou"));
		cityList.add(DropdownMenuItem(child: new Text("深圳"), value:"shenzhen"));
		return cityList;
	]
	
	Widget build(BuildContext context) {
		return new Column(
			children:<Widget>[
				new DropdownButton(
					items:getCityList(),
					hint: new Text("请选择城市"),
					onChanged: null
				)
			]
		)
	}
}
  • 想要它显示出来,在Scaffold里面添加
    在这里插入图片描述
  • 还需要写一个变量来存选中的city
class MyDropDownButton extends StatefulWidgets {
	
	State<StatefulWidget> createState() {
 		return _MyDropDownButton();
	}
}

class _MyDropDownButton extends State<MyDropDownButton> {
	List getCityList() [
		List<DropdownMeunItem> cityList = new List();
		cityList.add(DropdownMenuItem(child: new Text("上海"), value:"shanghai"));
		cityList.add(DropdownMenuItem(child: new Text("北京"), value:"beijing"));
		cityList.add(DropdownMenuItem(child: new Text("广州"), value:"guangzhou"));
		cityList.add(DropdownMenuItem(child: new Text("深圳"), value:"shenzhen"));
		return cityList;
	]
	var selectedCity;
	
	Widget build(BuildContext context) {
		return new Column(
			children:<Widget>[
				new DropdownButton(
					items:getCityList(),
					hint: new Text("请选择城市"),
					value: selectedCity,
					onChanged: (val) {
						setState(() {
							this.selectedCity = val;//把值赋给临时变量
						});
					}
				)
			],
		);
	}
}

4.widgets_单选框多选框

单选框

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Single Selection Example'),
        ),
        body: SingleSelectionWidget(),
      ),
    );
  }
}

class SingleSelectionWidget extends StatefulWidget {
  
  _SingleSelectionWidgetState createState() => _SingleSelectionWidgetState();
}

class _SingleSelectionWidgetState extends State<SingleSelectionWidget> {
  String selectedFruit = '';

  
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        RadioListTile(
          title: Text('Apple'),
          value: 'apple',
          groupValue: selectedFruit,
          onChanged: (value) {
            setState(() {
              selectedFruit = value;
            });
          },
        ),
        RadioListTile(
          title: Text('Banana'),
          value: 'banana',
          groupValue: selectedFruit,
          onChanged: (value) {
            setState(() {
              selectedFruit = value;
            });
          },
        ),
      ],
    );
  }
}

多选框

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Multiple Selection Example'),
        ),
        body: MultipleSelectionWidget(),
      ),
    );
  }
}

class MultipleSelectionWidget extends StatefulWidget {
  
  _MultipleSelectionWidgetState createState() => _MultipleSelectionWidgetState();
}

class _MultipleSelectionWidgetState extends State<MultipleSelectionWidget> {
  List<String> selectedFruits = [];

  
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        CheckboxListTile(
          title: Text('Strawberry'),
          value: selectedFruits.contains('strawberry'),
          onChanged: (value) {
            setState(() {
              if (value) {
                selectedFruits.add('strawberry');
              } else {
                selectedFruits.remove('strawberry');
              }
            });
          },
        ),
        CheckboxListTile(
          title: Text('Mango'),
          value: selectedFruits.contains('mango'),
          onChanged: (value) {
            setState(() {
              if (value) {
                selectedFruits.add('mango');
              } else {
                selectedFruits.remove('mango');
              }
            });
          },
        ),
      ],
    );
  }
}
  • 使用RadioListTile和CheckboxListTile小部件来创建单选框和多选框。通过修改value属性以及处理onChanged回调函数,您可以实现单选和多选的功能。

5.widgets_输入框

  • 在Flutter中,可以使用TextField小部件来创建输入框,让用户可以在应用程序中输入文本。TextField提供了各种属性和回调函数,以允许您自定义输入框的外观和行为
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Text Input Example'),
        ),
        body: TextInputWidget(),
      ),
    );
  }
}

class TextInputWidget extends StatefulWidget {
  
  _TextInputWidgetState createState() => _TextInputWidgetState();
}

class _TextInputWidgetState extends State<TextInputWidget> {
  TextEditingController _textEditingController = TextEditingController();

  
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(16.0),
      child: TextField(
        controller: _textEditingController,
        decoration: InputDecoration(
          labelText: 'Enter your text here',
          border: OutlineInputBorder(),
        ),
      ),
    );
  }

  
  void dispose() {
    _textEditingController.dispose();
    super.dispose();
  }
}

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

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

相关文章

基于yolov2深度学习网络的昆虫检测算法matlab仿真,并输出昆虫数量和大小判决

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022A 3.部分核心程序 .......................................................... for i 1:12 % 遍历结…

Julia编程01:Julia语言介绍

在2020上半年&#xff0c;因为疫情无法返校&#xff0c;所以在家待了半年&#xff0c;期间学习一点了R语言、Python、Julia、linux和C语言&#xff0c;只是学习基础语法并没有项目练习&#xff0c;因此返校半年后差不多都不记得了&#xff0c;现在重新捡起Julia丰富下当时写的笔…

Python 将文件夹中的图片信息导入到 Excel 的表格

引言 在数据处理和管理的日常任务中&#xff0c;经常需要将文件夹中的图片文件信息&#xff08;如文件名、路径、创建日期、大小、分辨率等&#xff09;整理成一个 Excel 表格。这篇博客将介绍如何使用 Python 中的 wxPython 模块创建一个 GUI 应用&#xff0c;用户可以通过这…

用Intellij实现web登录页面时,servlet已经配置好了,但是还是报404

今天看到一个404问题&#xff1a; 用Intellij实现web登录页面时&#xff0c;代码如下图所示。点击运行后会跳转到浏览器&#xff0c;但是输入/login时&#xff0c;浏览器显示404&#xff0c;且无法在控制面板上打印内容&#xff1b;输入/index时&#xff0c;也无法在浏览器上显…

Vue的router.addRoutes不起作用

Vue的router.addRoutes()不起作用解决方案 最近在学习制作后台管理系统的时候&#xff0c;涉及到了权限&#xff0c;在通过后台获取到数据后使用router.addRoutes()时不起作用。 最终发现左侧菜单组件中的路由是根据this.$router.options.routes来渲染的&#xff0c;最终使用…

UDP协议与TCP协议1.2

UDP UDP数据报UDP报头UDP载荷 UDP的报文格式&#xff1a; 这里的UDP长度&#xff0c;描述了整个UDP数据报&#xff0c;占多少个字节&#xff0c;这里整个UDP长度最多是64kb 在UDP中校验和就是使用CRC的方式来完成的 数据在网络传输中是可能会出现错误的&#xff0c;例如比特翻…

Spark SQL 中DataFrame DSL的使用

在上一篇文章中已经大致说明了DataFrame APi,下面我们具体介绍DataFrame DSL的使用。DataFrame DSL是一种命令式编写Spark SQL的方式&#xff0c;使用的是一种类sql的风格语法。 文章链接&#xff1a; 一、单词统计案例引入 import org.apache.spark.sql.{DataFrame, SaveMod…

Proteus仿真小技巧(隔空连线)

用了好几天Proteus了.总结一下使用的小技巧. 目录 一.隔空连线 1.打开添加网络标号 2.输入网络标号 二.常用元件 三.运行仿真 四.总结 一.隔空连线 引出一条线,并在末尾点一下. 1.打开添加网络标号 选择添加网络标号, 也可以先点击按钮,再去选择线(注意不要点端口) 2.…

【调试笔记-20240525-Windows-配置 QEMU/x86_64 运行 OpenWrt-23.05 发行版并搭建 WordPress 博客网站】

调试笔记-系列文章目录 调试笔记-20240525-Windows-配置 QEMU/x86_64 运行 OpenWrt-23.05 发行版并搭建 WordPress 博客网站 文章目录 调试笔记-系列文章目录调试笔记-20240525-Windows-配置 QEMU/x86_64 运行 OpenWrt-23.05 发行版并搭建 WordPress 博客网站 前言一、调试环境…

【EXCEL_VBA_基础知识】15 使用ADO操作外部数据

课程来源&#xff1a;王佩丰老师的《王佩丰学VBA视频教程》&#xff0c;如有侵权&#xff0c;请联系删除&#xff01; 目录 1. 使用ADO链接外部数据源 2. 常用SQL语句&#xff08;Execute(SQL语句)&#xff09; 2.1 查询数据、查询某几个字段、带条件查询、合并两表数据、插…

OpenWrt 23.05 安装中文语言包 教程 软路由实测 系列三

1 web 登录 #更改阿里云下载源&#xff0c;可参考第一篇文章:OpenWrt U盘安装使用 详细教程 x86/64平台 软路由实测 系列一-CSDN博客

【Linux】icmp_seq=1 Destination Host Unreachable

执行ping 命令提示&#xff1a;From 192.168.XX.XX icmp_seq1 Destination Host Unreachable 这个错误消息通常表示以下几种情况之一&#xff1a; 网络连接问题&#xff1a;目标主机可能没有连接到网络&#xff0c;或者网络中的某个路由器无法将数据包转发到目标主机。 目标主…

Vue从入门到实战Day11

一、为什么要学Vue3 Vue3官网&#xff1a;简介 | Vue.js 1. Vue3的优势 2. Vue2选项式API vs Vue3组合式API 示例&#xff1a; 二、create-vue搭建Vue3项目 1. 认识create-vue create-vue是Vue官方新的脚手架工具&#xff0c;底层切换到了vite(下一代构建工具)&#xff0c;为…

【OpenGL实践-09】用图元作图笔记

文章目录 一、说明二、下列程序使用库三、OpenGL图元盘点四、图元解析4.1 线段4.2 表面surface4.3 三角形表面surface 五、图元作图示例5.1 三角链和圆环GL_TRIANGLE_STRIP5.2 三角链和圆环 六、三维物体渲染6.1 直纹面6.2 旋转面 七、GLSL程序优化代码7.1 顶点着色器7.2 几何着…

AI视频教程下载:全面掌握ChatGPT和LangChain开发AI应用(附源代码)

这是一门深入的课程&#xff0c;涉及ChatGPT、LangChain和Python。打造专注于现实世界AI集成的AI应用&#xff0c;课件附有每一节涉及到的源代码。 **你将学到什么&#xff1a;** - 将ChatGPT集成到LangChain的生产风格应用中 - 使用LangChain组件构建复杂的文本生成管道 - …

AI助力农田作物智能化激光除草,基于轻量级YOLOv8n开发构建农田作物场景下常见20种杂草检测识别分析系统

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术在各个领域的应用愈发广泛&#xff0c;其中农业领域也不例外。近年来&#xff0c;AI助力农田作物场景下智能激光除草的技术成为了农业领域的一大亮点&#xff0c;它代表着农业智能化、自动化的新趋势。智…

【小tips】当机器里面有多个版本的gcc时,该如何切换当前的gcc版本?

背景切换gcc版本 背景 有时候因为项目需求&#xff0c;可能不同的项目需要不同的gcc版本&#xff0c;所以机器上会安装多个版本的gcc&#xff0c;那我们如何切换到想要使用的版本&#xff1f; 切换gcc版本 比如我的机器上有两个版本的gcc&#xff1a; 我当前的版本是gcc-4…

node版本管理nvm详细教程

安装 nvm 之前先清理node相关的所有配置&#xff0c;如环境变量、.npmrc文件、node_cache、node_global 等 一、下载nvm 任选一处下载即可 官网&#xff1a;Releases coreybutler/nvm-windows (github.com) 码云&#xff1a;nvm下载仓库: nvm下载仓库 百度网盘&#xff1…

strcpy函数及其模拟实现

1. 前言 在本文中&#xff0c;我将带着各位读者从了解strcpy函数&#xff0c;到会用strcpy函数去实现我们编程时的需求&#xff0c;最后再来自己模拟实现一个strcpy函数。 “毕竟只有自己做的&#xff0c;自己才敢放心食用“&#x1f602;&#x1f602;&#x1f602; 2. strc…

开源网页视频会议,WebRTC音视频功能比较

1. 概述 OpenAI 发布了新一代旗舰生成模型 GPT-4o,这是一款真正的多模态大模型,可以「实时对音频、视觉和文本进行推理」。 支持与 AI 实时语音对话,且响应时间达到毫秒级;交互中可识别人类情绪并以相应的情感做出回应;多语言能力的提升,WebRTC 成为大模型关键能力。 视频会议…