第二节 Flutter Container容器组件的使用

才学习了 2小时不到,就发现最大的问题 ,就是 一切面向widget 的嵌套然人觉得恶心.
看来以后得把所有view全部都组件化 才能维护得了代码,不然这项目做完,根本不想去看了

image.png

padding,margin和decoration这几个属性。我们先来看看Padding属性。

padding属性
padding的属性就是一个内边距,它和你使用的前端技术CSS里的padding表现形式一样,指的是Container边缘和child内容的距离。先来看一个内边距为10的例子
RN 里面也是padding这个属性 就是内边距的距离

child:Container(
  child:new Text('hello world),
  alignment: Alignment.topLeft,
  width:500.0,
  height:400.0,
  color: Colors.lightBlue,
  padding:const EdgeInsets.all(10.0), //这里是内边距 注意一定是浮点类型 不能写成整型 const 常量不可变的
),

//说明
padding:EdgeInsets.fromLTRB(左,上,右,底)  //其实就是对应的了left,top,right,bottom.  const 可以不写

margin属性
会了padding属性的设置,margin就变的非常容易了,因为方法基本上一样。不过margin是外边距,指的是container和外部元素的距离。

现在要把container的外边距设置为10个单位,代码如下:

child:Container(
  child:new Text('Hello JSPang',style: TextStyle(fontSize: 40.0),),
  alignment: Alignment.topLeft,
  width:500.0,
  height:400.0,
  color: Colors.lightBlue,
  padding:const EdgeInsets.fromLTRB(10.0,30.0,0.0,0.0),
  margin: const EdgeInsets.all(10.0),
),
//API相同不多做解释

decoration属性
decoration是 container 的修饰器,主要的功能是设置背景和边框。

比如你需要给背景加入一个渐变,这时候需要使用BoxDecoration这个类,代码如下(需要注意的是如果你设置了decoration,就不要再设置color属性了,因为这样会冲突)。

child:Container(
  child:new Text('Hello JSPang',style: TextStyle(fontSize: 40.0),),
  alignment: Alignment.topLeft,
  width:500.0,
  height:400.0,
  padding:const EdgeInsets.fromLTRB(10.0,30.0,0.0,0.0),
  margin: const EdgeInsets.all(10.0),
  decoration:new BoxDecoration(  //这里是设置渐变
    gradient:const LinearGradient(
      colors:[Colors.lightBlue,Colors.greenAccent,Colors.purple]
    )
  ),
border:Border.all(width:2.0,color:Colors.red) //设置边框色和宽度
),

最后是页面完整代码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';

class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);

  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  TextEditingController _textEditingController = new TextEditingController();

  final showText =
      '1测试数据asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdasdfasdfasdfads11112asdfasdfasdwqe222222222222222222';
  @override
  Widget build(BuildContext context) {
    gethttp();
    final size = MediaQuery.of(context).size;
    final width = size.width;
    final height = size.height;
    return Scaffold(
      appBar: AppBar(
        title: Text('测试'),
      ),
      body: Center(
          // child: Column(
          //   children: <Widget>[
          //     TextField(
          //       controller: _textEditingController,
          //       decoration: InputDecoration(
          //         contentPadding: EdgeInsets.all(10.0),
          //         labelText: '类型',
          //         helperText: '请求'
          //       ),
          //       autofocus: false,
          //     ),
          //     RaisedButton(
          //       onPressed: (){},
          //       child: Text('选择完毕'),
          //     ),
          //     Text(
          //       showText,
          //       overflow: TextOverflow.ellipsis,
          //       maxLines: 1,
          //     ),
          //   ],
          // ),
          child: Column(
        children: <Widget>[
          new Text(
            '测试1',
            style: new TextStyle(inherit: true),
          ),
          //color颜色--fontSize字体大小--fontWeight粗细
          new Text(
            '测试2',
            style: new TextStyle(
                color: Colors.red, fontSize: 18.0, fontWeight: FontWeight.w800),
          ),
          //fontStyle斜体
          new Text('测试3',
              style:
                  new TextStyle(fontSize: 18.0, fontStyle: FontStyle.italic)),
          //letterSpacing字符间距
          new Text(
            '测试4',
            style: new TextStyle(letterSpacing: 10.0),
          ),
          //单词间距
          new Text(
            'i hit you 测试 中文',
            style: new TextStyle(wordSpacing: 30.0),
          ),
          new Text(
            '测试6',
            //style: new TextStyle(textBaseline: TextBaseline.alphabetic),)
            style: new TextStyle(
                textBaseline: TextBaseline.ideographic,
                fontSize: 25.0,
                decoration: TextDecoration.lineThrough),
          ),
          //'height: 用在Text控件上的时候,会乘以fontSize做为行高,
          new Text(
            '测试7',
            style: new TextStyle(height: 2.0),
          ),
          //decoration和decorationStyle
          new Text('测试8',
              style: new TextStyle(
                  decoration: TextDecoration.lineThrough,
                  decorationStyle: TextDecorationStyle.wavy,
                  textBaseline: TextBaseline.alphabetic,
                  shadows: [])),
          new Container(
            width: width,
            height: 200,
            padding: const EdgeInsets.all(10.0),
            margin: const EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 0.0),
            color: Colors.blue,
            
            child: new Container(
              width: 40.0,
              height: 69.0,
              padding: EdgeInsets.all(20.0),
              // alignment: Alignment.center,
              // color: Colors.red,
              decoration: BoxDecoration(
                gradient: const LinearGradient(
                  colors: [Colors.white,Colors.blue,Colors.orange]
                ),
                borderRadius: BorderRadius.circular(10.0),
                border:Border.all(width:2.0,color:Colors.red)
              ),
              child: new Text(
                'hello word',
                style: TextStyle(
                  fontSize: 20,
                  color: Colors.green,
                ),
                
              ),
            ),
          ),
        ],
      )),
    );
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354