首页 > 其他分享 >FlutterNote1

FlutterNote1

时间:2023-06-27 14:24:45浏览次数:31  
标签:控件 items FlutterNote1 列表 Text new BoxFit

Flutter 基本结构

以一个 helloworld 程序展示一个 flutter 应用的基本结构。

    import 'package:flutter/material.dart';
    void main() => runApp(Myapp());
    class Myapp extends StatelessWidget{
        @override
        Widget build(BuildContext context) {
            return MaterialApp(
                title: 'Hello World',
                home: Scaffold(
                    appBar: new AppBar(
                    title: Text('Hello World'),
                    ),
                body: Center(
                    child: Text('Hello Flutter!',style: TextStyle(fontSize: 25.0),),
                    )
                ),
            );
        }
    }

Flutter 常用控件

1.Text 控件

textAlign:TextAlign.center 控制文本居中显示,当然还有 left、right、start、end 等属性值

maxLines:该文本最多显示成几行,填数字即可。溢出部分不显示。

overflow:文本溢出处理,属性值 TetxOverflow.(clip)(fade)(ellipsis),分别是切除,渐变,省略

style:TextStyle()内包含其他属性。fontsize:25.0(要用浮点数)。color:Color.fromARGB(a,r,g,b)。

decoration:TextDecoration.underline 代表文本加下划线。

decorationstyle:TextDecorationStyle.solid 代表装饰是实线。

2.Container 控件

相当于 html 里的 div,就是一个块儿。

alignment:Alignment.center--对齐格式,点后面也可以带两个单词,比如 bottomleft,即底部靠左,也可以用坐标(x,y)表示。

对于一个 div,肯定有 width、height、color 等属性,其属性值是浮点数,得带小数点。

padding 和 margin: EdgeInsets.all(10.0)代表上下左右四个方向都有 10.0 的 padding 或者 margin。当然用方法.fromLTRB 带四个参数更随心所欲。

decoration: new BoxDecoration(),内部加其他属性。比如 gradient(渐变色): LinearGradient(colors:[Colors.blue,colors.green])。注意渐变色与 color 冲突。

还能加 border:Border.all(width:5.0,color:Colors.red),代表四个方向的边框线。

3.Image 控件

new 一个 Image 控件,有四种类型,分别是 asset(本地资源)、file(本地图片)、memory、network(网络图片)。

加入图片后还可以用 fit:BoxFit 选择填充方法。

属性名称 样式
BoxFit.contain 全图居中显示但不充满,显示原比例
BoxFit.fill 全图显示且填充满,图片可能会拉伸
BoxFit.cover 图片可能拉伸,也可能裁剪,但是充满容器
BoxFit.fitHeight 图片可能拉伸,可能裁剪,高度充满
BoxFit.fitWidth 图片可能拉伸,可能裁剪,宽度充满
BoxFit.scaleDown 效果和 contain 差不多, 但是只能缩小图片,不能放大图片

也可以再加入颜色,并用 colorBlendMode:BlendMode.XXX 来混色。

repeat:ImageRepeat 设置图片重复填充的方式。

4.ListView 控件

new 一个 ListView 列表控件

body:new ListView(
    children: <Widget>[
        new ListTile(
            leading:new Icon(Icons.XXX),
            title:new Text('XXX')
        )
        ......
    ]
)

作为列表项的组件也可以不是 icon,而是图片,就要用到 image 了。

横向列表

在 listview 中 scrollDirection: Axis.horizontal,代表横向列表。然后每个列表部件只设置宽度,可以左右拉动。如果是纵向列表,那就是 Axis.vertical,每个部件设置高度,可以下拉。

动态列表

在 runApp()中声明列表项,如 items:List(),中间加数字可以固定列表长度。items:List<string>()确定了项的类型,items:[1,2,3]直接赋值。

还有 items:List<string>.generate(1000,(i)=>"Items &i")用 generate 函数,相当于数组,i 则是下标。引号内容是每一项的格式,&号作替换符。

举个例子:

import 'package:flutter/material.dart';
void main() => runApp(Myapp(
  items:List<String>.generate(1000, (i)=>"第$i项:")
));
class Myapp extends StatelessWidget{
  final List<String> items;
//  接收items参数
  Myapp({Key key,@required this.items}):super(key:key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Hello World',
      home: Scaffold(
        appBar: new AppBar(
          title: Text('动态列表'),
        ),
        body: new ListView.builder(
          itemCount: items.length,//得到传递过来的参数的长度
          itemBuilder: (context,index){
            return new ListTile(
              title: Text('${items[index]}'),
            );
          },
        ),
      ),
    );
  }
}

网格列表

以文本表示的网格列表,换成 Image 控件可以显示图片。

body: GridView.count(
    padding:EdgeInsets.all(30.0),
    crossAxisSpacing:20.0,//网格之间的间距
    crossAxisCount:3 //每行显示的列表项个数
    children:<Widget>[
        Text:"..."
        Text:"..."
        ...
    ]
)

另一种网格列表的写法:

body: GridView(
    gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount:3,
        mainAxisSpacing:2.0,//纵向列表项间距
        CrossAxisSpacing:2.0,//横向列表项间距
        childAspectRatio:1.0,//宽高比
    ),
    children:<Widget>[
        new Image.network(src),
        ....
        ....
    ],
)

标签:控件,items,FlutterNote1,列表,Text,new,BoxFit
From: https://www.cnblogs.com/dirtycat/p/17508726.html

相关文章