热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何进行flutter布局开发?

1、2、RenderObjectWidget:它主要提供了一些如何去约束它里面的布局的一些配置。它有两个比较重要的实现,一个是SingleChildRenderO

1、

2、

RenderObjectWidget:它主要提供了一些如何去约束它里面的布局的一些配置。

它有两个比较重要的实现,一个是SingleChildRenderObjectWidget,另一个是MultiChildRenderObjectWidget.

 

 

SingleChildRenderObjectWidget:单节点的一个组件

Opacity   [əʊˈpæsəti]   :用来改变透明度的一个组件

ClipOval:将布局裁剪成圆形的一个组件

ClipRRect:裁剪成方形的一个组件

PhysicalModel:将布局显示成不同的形状的一个组件

Align:(如Center,将布局进行居中)

Padding:设置布局内边距

SizedBox:用来约束布局的大小

FractionallySizedBox:可以约束里面的布局垂直方向或者水平方向的伸展,也就是说它可以把布局垂直方向或者水平方向充满整个屏幕,它是一个可以约束它里面的组件可以撑多大的一个组件

 

ClipOval:将布局裁成圆形

 

 

ClipRRect:裁成方形    Opacity:设置透明度

 

 

PhysicalModel:将布局显示成不同的组件

boderRadius:裁剪布局的四个角,裁剪为圆角

 

 

FractionallySizedBox:可以约束里面的布局垂直方向或者水平方向的伸展,也就是说它可以把布局垂直方向或者水平方向充满整个屏幕,它是一个可以约束它里面的组件可以撑多大的一个组件

不添加FractionallySizedBox时,Text只是按它的内容填满了

使用FractionallySizedBox以后:

 

 

 

MultiChildRenderObjectWidget:多节点的一个组件

Stack:相当于Android的FrameLayout,它里面的布局都是一个叠一个,后面的布局会覆盖前面的布局

Flex:有两个重要的实现,Column和Row。Column:y轴。垂直方向上从上到下的一个组件。    Row:x轴。水平方向,从左到右的水平方向的一个组件。

Wrap:和Row组件很像,它们都是从左到右排列的布局。不同之处在于Wrap可以换行。

Flow:Flow组件用起来不是很方便,所以它很少遇到。

 

Column:纵向排列布局   Row:横向排列布局

 

 

Stack:相当于Android的FrameLayout,它里面的布局都是一个叠一个,后面的布局会覆盖前面的布局

 

 

Wrap:和Row组件很像,它们都是从左到右排列的布局。不同之处在于Wrap可以换行。

 

3、

ParentDataWidget:它有两个比较重要的实现,一个是Positioned,一个是Flexible

Positioned:用于固定View的一个位置的一个组件,通常与Stack进行搭配使用

Flexible:它有一个非常重要的实现Expanded,就是在父容器中能够展开多大大小的一个组件

 

Positioned:用于固定View的一个位置的一个组件,通常与Stack进行搭配使用

第二张图片位于第一张图片的左下方

 

 

 

Flexible:它有一个非常重要的实现Expanded,就是在父容器中能够展开多大大小的一个组件

不使用Expanded之前,只能按内容填充高度

因为Column是纵向的,所以就会在y轴填充满屏幕

4、

import 'package:flutter/material.dart';
import 'package:flutter_color_plugin/flutter_color_plugin.dart';void main() => runApp(FlutterLayoutPage());//如何进行Flutter布局开发?
class FlutterLayoutPage extends StatefulWidget{@overrideState createState() => _FlutterLayoutGroupPage();
}class _FlutterLayoutGroupPage extends State{int _currentIndex=0;Future _handleRefresh()async{await Future.delayed(Duration(milliseconds: 200));return null;}_item(String title,Color color){return Container(alignment: Alignment.center,decoration: BoxDecoration(color: color),child: Text(title,style: TextStyle(fontSize: 22,color:Colors.white)),);}_chip(String label){return Chip(label: Text(label),avatar: CircleAvatar(backgroundColor: Colors.blue.shade900,child: Text(label.substring(0,1),style: TextStyle(fontSize: 10),),));}@overrideWidget build(BuildContext context) {TextStyle textStyle=TextStyle(fontSize: 20);return MaterialApp(title: '如何进行Flutter布局开发?',theme: ThemeData(primarySwatch: Colors.yellow,),home: Scaffold(appBar: AppBar(title: Text('如何进行Flutter布局开发?')),bottomNavigationBar: BottomNavigationBar(//默认选中第0个currentIndex: _currentIndex,onTap: (index){setState(() {//当点击后回调该方法,改变点击的index_currentIndex=index;});},items:[BottomNavigationBarItem(icon: Icon(Icons.home,color: Colors.grey),activeIcon: Icon(Icons.home,color: Colors.blue),title:Text('首页')),BottomNavigationBarItem(icon: Icon(Icons.list,color: Colors.grey),activeIcon: Icon(Icons.list,color: Colors.blue),title:Text('列表'))]),floatingActionButton: FloatingActionButton(onPressed: null,child: Text('点我')),body: _currentIndex==0?RefreshIndicator(child:ListView(children: [Container(decoration: BoxDecoration(color: Colors.blue),alignment: Alignment.center,child: Column(children: [Row(children: [ClipOval(child: SizedBox(width: 100,height: 100,child: Image.network('http://www.devio.org/img/avatar.png'),)),Padding(padding: EdgeInsets.all(10),child: ClipRRect(borderRadius:BorderRadius.all(Radius.circular(10)),//圆角child: Opacity(opacity: 0.6,child: Image.network('http://www.devio.org/img/avatar.png',width: 100,height: 100,)),),),Text("横向 Row"),],),//网上加载图片Image.network('http://www.devio.org/img/avatar.png',width: 100,height: 100,),TextField(//输入文本的样式decoration: InputDecoration(contentPadding: EdgeInsets.fromLTRB(5, 0, 0, 0),hintText: '请输入',hintStyle: TextStyle(fontSize: 15)),),Container(height: 100,margin: EdgeInsets.all(10),
// decoration: BoxDecoration(color: Colors.lightBlueAccent),child:PhysicalModel(color: Colors.transparent,borderRadius: BorderRadius.circular(6),clipBehavior: Clip.antiAlias,//抗锯齿child:PageView(children: [_item("Page1", Colors.deepPurple),_item("Page2", Colors.green),_item("Page3", Colors.red),],),)),Column(children: [FractionallySizedBox(widthFactor: 1,child: Container(decoration: BoxDecoration(color: Colors.greenAccent),child: Text('宽度撑满'),)),],),],),),Stack(children: [Image.network('http://www.devio.org/img/avatar.png',width: 100,height: 100,),Positioned(left: 0,bottom: 0,child: Image.network('http://www.devio.org/img/avatar.png',width: 36,height: 36,),)],),Wrap(//创建一个wrap布局,从左向右进行排列,会自动换行spacing: 8,//水平间距runSpacing: 6,//垂直间距children: [_chip("Flutter"),_chip("进阶"),_chip("实战"),_chip("携程"),_chip("App"),],)]),onRefresh: _handleRefresh):Column(children: [Text("列表"),Expanded(child: Container(decoration: BoxDecoration(color: Colors.red),child: Text('拉伸填满高度'),))],)),);}}//StateLessWidget与基础组件
class LessGroupPage extends StatelessWidget {// This widget is the root of your application.@overrideWidget build(BuildContext context) {TextStyle textStyle=TextStyle(fontSize: 20);return MaterialApp(title: 'StatelessWidget与基础组件',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: Text('StatelessWidget与基础组件')),body: Container(decoration: BoxDecoration(color: Colors.blue),alignment: Alignment.center,child: Column(children: [Text('I am an Text',style: textStyle),Icon(Icons.android,size: 50,color: Colors.red),CloseButton(),BackButton(),Chip(//材料设计中一个非常有趣的小部件avatar: Icon(Icons.people),label: Text('StatelessWidget与基础组件'),),Divider(height: 10,//容器高度,不是线的高度indent: 10,//左侧间距color: Colors.orange),Card(color: Colors.red,elevation: 5,//阴影margin: EdgeInsets.all(10),child: Container(padding: EdgeInsets.all(10),child: Text('I am Card',style: textStyle,),),),AlertDialog(title: Text('盘它'),content: Text('你这个糟老头子坏得很'),)],),),),);}
}

 

 

 


推荐阅读
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • PBO(PixelBufferObject),将像素数据存储在显存中。优点:1、快速的像素数据传递,它采用了一种叫DMA(DirectM ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
author-avatar
艾特PONYO
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有