Flutter Widgets (Container/Row/Column/Image)

       俗話說知己知彼百戰百勝,若是對Flutter 裏面的各類Widgets不瞭解,那你就別想將它們組合成你想要的效果。從今天開始。會把一個一個的widget 擼一遍。。知道它大概的用法。效果。當你想作某個效果的時候。腦殼裏面能第一時間想到它。html

  Sample能夠在這裏找到代碼 Sampe code Github

      Container 做爲最經常使用的內容widgetgit

margin,padding, color(background),width,height,children 這些屬性很好理解。github

        new Container(
          margin: const EdgeInsets.all(10.0),
          color: const Color(0xFF00FF00),
          width: 48.0,
          height: 48.0,
          child: new Text("Hello Flutter"),
          padding:  const EdgeInsets.only(left: 6.0),
        );
constraints 對Container大小的約束。他會結合width,height進行處理,後面在Flutter wideget 是怎麼佈局構造中詳細講解
foregroundDecoration 一個前置的裝飾器。哈哈把個人Text 擋住了。
transform 變形
new Container(
          constraints: new BoxConstraints.expand(
            height: Theme.of(context).textTheme.display1.fontSize * 1.1 + 200.0,
          ),
          padding: const EdgeInsets.all(8.0),
          color: Colors.teal.shade700,
          alignment: Alignment.center,
          child: new Text('Hello World', style: Theme.of(context).textTheme.display1.copyWith(color: Colors.white)),
          foregroundDecoration: new BoxDecoration(
            image: new DecorationImage(
              image: new NetworkImage('http://p0.so.qhimgs1.com/bdr/200_200_/t011fa0ccaa6d22240c.jpg'),
              centerSlice: new Rect.fromLTRB(270.0, 180.0, 1360.0, 730.0),
            ),
          ),
          transform: new Matrix4.rotationZ(0.1),
        );

         Row/Column 經常使用的多內容Widget,能夠將Child 按照水平/垂直的方式(跟我瞭解的徹底相反。。哈哈哈好尷尬)佈局,它們都繼承於Flex.緩存

Row和Column差異是設置了不一樣的flex-direction.ide

Flex經過direction設置了flex的主軸方向即main axis。和主軸垂直的方向叫作cross axis。flex佈局中對子佈局的控制是從main axis 和cross axis兩個方向上進行的.佈局

 Container(
      color: Colors.red,
      width: double.infinity,
      child:new Column(
        verticalDirection: VerticalDirection.up,
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisSize: MainAxisSize.max,
        children: <Widget>[
          new Text('Deliver features faster', textAlign: TextAlign.center),
          new Text('Craft beautiful UIs', textAlign: TextAlign.center),
          new FittedBox(
            fit: BoxFit.contain, // otherwise the logo will be tiny
            child: const FlutterLogo(),
          ),
        ],
      ) ,
    );

 

一圖流flex

       

           Image  /FadeInImage 帶佔位符       spa

 

      默認是這幾種方式。支持GIF格式,若是你想寫一個緩存本地硬盤的Image。你能夠重寫ImageProvider.這裏推薦一下好用的插件flutter_advanced_networkimage插件

     對於默認的Image是有作內存緩存,默認是1000.3d

const int _kDefaultSize = 1000;
const int _kDefaultSizeBytes = 100 << 20; // 100 MiB//清除
PaintingBinding.instance.imageCache.clear();
//緩存張數
PaintingBinding.instance.imageCache.maximumSize=500;
//緩存大小
PaintingBinding.instance.imageCache.maximumSizeBytes=1000;

fit Description Result
BoxFit.fill 全圖顯示,顯示可能拉伸,充滿
BoxFit.contain 全圖顯示,顯示原比例,不需充滿
BoxFit.cover 顯示可能拉伸,可能裁剪,充滿
BoxFit.fitWidth 顯示可能拉伸,可能裁剪,寬度充滿
BoxFit.fitHeight 顯示可能拉伸,可能裁剪,高度充滿
BoxFit.none    
BoxFit.scaleDown 效果和contain差很少,可是此屬性不容許顯示超過源圖片大小,可小不可大
相關文章
相關標籤/搜索