当前位置: 首页 > news >正文

Flutter桌面开发(三、widget布局与表单)

一、流式布局
横铺或者竖着铺
Row 或者 Column
这俩都是有Children的就是可以有多个子元素

例子:

Row(
	Children:[
		Container(),
		Container(),
		Container(),
	]

Container 类似于 html中的DIV 可以设置背景 border 和 宽度高度

Container(
  decoration: BoxDecoration(
    image: DecorationImage(
      image: AssetImage('assets/images/login_bg.webp'),
      fit: BoxFit.cover,
    ),
  ),
),

另外,如果需要在一个元素上添加手表手势和点击事件,就需要使用其他支持的widget嵌套

 MouseRegion(
    cursor: SystemMouseCursors.basic, // 鼠标手势
    child: GestureDetector( // 绑定点击事件
      onTap: isLoginButtonEnabled ? handleLogin : null,
      child: Container(

元素和元素之间的间距 可以使用Container设置Padding Margin 或者 使用设置宽或者高的SizeBox


padding: const EdgeInsets.only(top: 10, bottom: 10),

EdgeInsets.all 所有

SizedBox(width: 16),

居中定位使用Center 这个widget. 配合 中轴线使用

Center(
  child: Image.asset(
    'assets/images/login_logo.webp',
    width: 123,
    height: 40,
    fit: BoxFit.cover,
  ),
)

水平和垂直居中
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,

二、层叠布局
需要使用 Stack和Positioned
类似于 html中的position absolute但是 还是有差别的
一定要注意 Stack 是 Z轴 包住的部分在下面 Postioned 弹出在Stack上
在这里插入图片描述

三、表单
表单主要是输入框

TextField(
   controller: _controller,
   cursorHeight: 14,
   textAlignVertical: TextAlignVertical.center,
   style: TextStyle(
     fontSize: 14,
     height: 1.5,
   ),
   decoration: InputDecoration(
     border: InputBorder.none,
     hintText: '请输入手机号',
     contentPadding: const EdgeInsets.only(top: 15, bottom: 15, left: 2),
     hintStyle: TextStyle(
       fontSize: 14,
       color: Color.fromRGBO(191, 191, 191, 1),
     ),
   ),
   keyboardType: TextInputType.number,
   inputFormatters: [
     FilteringTextInputFormatter.digitsOnly,
     LengthLimitingTextInputFormatter(11)
   ],
   onChanged: (text) {
     print('phone number field: $text (${text.characters.length})');
     widget.updatePhoneNumber(text);
   },
 ),

需要数据同步就要用到 TextEditingController

 late TextEditingController _controller;
 late TextEditingController _controller_email;

  
  void initState() {
    super.initState();
    _controller = TextEditingController(text: widget.phoneNumber);
    _controller_email = TextEditingController(text: widget.emailAddress);
  }

  
  void dispose() {
    _controller.dispose();
    _controller_email.dispose();
    super.dispose();
  }

其中 keyboardType: TextInputType.number, 限制只能输入数字
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
LengthLimitingTextInputFormatter(11)
],
限制最长11位

四、 自适应布局 Expanded

http://www.dtcms.com/a/67125.html

相关文章:

  • Qt的QToolButton设置弹出QMenu下拉菜单
  • 如何实现Spring Boot与Oracle数据库的完美对接?
  • 2025-03-12 学习记录--C/C++-PTA 习题8-4 报数
  • 12. Pandas :使用pandas读Excel文件的常用方法
  • WPF 制作机械手动画
  • 在线教育网站项目第三步 :通过wsl 2 安装ubuntu24.04
  • nginx中proxy_pass和root的区别
  • Flask
  • 抖音生活服务联动监管开展专项整治 济南66家违规餐饮商家下架
  • XSS跨站脚本攻击
  • ESP32芯片模组方案,设备物联网无线通信,WiFi蓝牙交互控制应用
  • Java中main函数中public static void main2(String[] args) 的String[] args是什么意思?
  • 用SpringBoot做一个web小案例实现登录
  • 宇树ROS1开源模型在ROS2中Gazebo中仿真
  • HCIE考试经验分享:我的华为云服务HCIE认证奋斗史
  • Java 大视界 -- Java 大数据在智慧文旅虚拟导游与个性化推荐中的应用(130)
  • 【PyMySQL】Python操作MySQL
  • Html5记忆翻牌游戏开发经验分享
  • 通过deepseek学习lua写网页
  • SQLark 实战 | 如何从Excel、csv、txt等外部文件进行数据导入
  • doris:SQL 方言兼容
  • 蓝桥杯2024年第十五届省赛真题-团建
  • Modbus RTU协议详解:基于 STM32 与脉冲电源的通信项目实例
  • vscode关闭仓库后如何打开
  • Adobe Genuine Service Alert 一直弹窗,老是一直弹窗【解决方法】
  • 微信小程序:实现多功能表格效果,例如滚动效果、宽度自定义、多选、行内编辑等功能
  • PostgreSQL16 的双向逻辑复制
  • Android实现简易计算器
  • Go执行当前package下的所有方法
  • 侯捷C++课程学习笔记:详解智能指针(三)