Flutter筆記(三) - Flutter的基礎(chǔ)Widget

1. 文本W(wǎng)idget

1.1. 普通文本展示

在Flutter中昌阿,文本的控制參數(shù)分為兩類:

  • 控制文本布局的參數(shù): 如文本對齊方式 textAlign两芳、文本排版方向 textDirection沛简,文本顯示最大行數(shù) maxLines、文本截?cái)嘁?guī)則 overflow 等等问顷,這些都是構(gòu)造函數(shù)中的參數(shù)九府;
  • 控制文本樣式的參數(shù): 如字體名稱 fontFamily、字體大小 fontSize父阻、文本顏色 color愈涩、文本陰影 shadows 等等,這些參數(shù)被統(tǒng)一封裝到了構(gòu)造函數(shù)中的參數(shù) style 中加矛;
class MyHomeBody extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text(
      "Hello Worf flutter \n這是Flutter文本演示第二行\(zhòng)n這是Flutter富文本演示第三行",
      textAlign: TextAlign.center, // 所有內(nèi)容都居中對齊履婉,只有文字占有的寬度達(dá)到屏幕的寬度時(shí),才會起作用
      maxLines: 3,
      overflow: TextOverflow.ellipsis, // 超出部分顯示...
//      textScaleFactor: 1.25, 縮放
      style: TextStyle(
        fontSize: 20,
        color: Colors.purple
      ),
    );
  }
}

1.2. 富文本展示

class YZHomeContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text.rich(
      TextSpan(
        children: [
          TextSpan(text: "Hello Word", style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold, color: Colors.black)),
          TextSpan(text: "flutter", style: TextStyle(fontSize: 18, color: Colors.redAccent)),
          TextSpan(text: "\n這是Flutter富文本演示第二行;\n這是Flutter富文本演示第三行;")
        ],
      ),
      style: TextStyle(fontSize: 20, color: Colors.purple),
      textAlign:TextAlign.center,
    );
  }
}

WechatIMG39.jpeg

2. 按鈕Widget

2.1. 常規(guī)

class YZHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
            title: Text("基礎(chǔ)Widget")
        ),
        body: YZHomeContent(),
        floatingActionButton: FloatingActionButton(
            child: Icon(Icons.add),
            onPressed: () => print("123")
        )斟览,
// floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, //浮動按鈕位置
    );
  }
}

---

class YZHomeContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        FloatingActionButton(
          child: Text("FloatingActionButton"),
          onPressed: () {
            print("FloatingActionButton Click");
          },
        ),
        RaisedButton(
          child: Text("RaisedButton"),
          onPressed: () {
            print("RaisedButton Click");
          },
        ),
        FlatButton(
          child: Text("FlatButton"),
          onPressed: () {
            print("FlatButton Click");
          },
        ),
        OutlineButton(
          child: Text("OutlineButton"),
          onPressed: () {
            print("OutlineButton Click");
          },
        )
      ],
    );
  }
}
button.png

2.1.1. 設(shè)置按鈕的大小

  • button包裹container;
 Container(
            width: double.infinity,
            height: 40,
            child: FlatButton(
              child: Text("登錄", style: TextStyle(fontSize: 20, color: Colors.white),),
              color: Colors.blue,
              onPressed: (){

              },
            ),
          ),

2.2. 自定義按鈕

  • 默認(rèn)情況下毁腿;button上下有以一定的間距;
//自定義button 圖標(biāo)-文字-背景-圓角
        FlatButton(
            onPressed: (){},
            color: Colors.orange,
           //消除按鈕不足48時(shí)的上下間距
            materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
           //設(shè)置內(nèi)容包裹文字
            padding: EdgeInsets.all(0),
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(8)
            ),
            child: Row(

              mainAxisSize: MainAxisSize.min,
              children: [
                Icon(Icons.favorite, color: Colors.red),
                Text("點(diǎn)贊")
              ]  
            )
        )
  • 默認(rèn)的button不能設(shè)置過小,
    解決:要修改在外面包裹一下buttonTheme苛茂;
 ButtonTheme(
          minWidth: 50,
          height: 50,
          child: FlatButton(
            child: Text("FlatButton"),
            onPressed: () {
              print("FlatButton Click");
            },
          ),
        ),

3. 圖片

3.1 加載網(wǎng)絡(luò)圖片

  • 網(wǎng)絡(luò)圖片flutter自動做了緩存已烤,最大1000張,最大100M妓羊;
class InternetImage extends StatelessWidget {
  final imageUrl = "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fa0.att.hudong.com%2F30%2F29%2F01300000201438121627296084016.jpg&refer=http%3A%2F%2Fa0.att.hudong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617871571&t=7b6d8e2a1b411019395f47a87f6c82b3";

  @override
  Widget build(BuildContext context) {
    return Image(
      //顏色混入
      // color: Colors.green,
      // colorBlendMode: BlendMode.colorDodge,
      image: NetworkImage(imageUrl),
      width: 200,
      height: 200,
      // fit: BoxFit.cover,
      fit: BoxFit.fitWidth,//寬度一定胯究,高度自適應(yīng)
      // repeat: ImageRepeat.repeatY,
      // alignment: Alignment.bottomCenter,//在當(dāng)前矩形框內(nèi),位于底部中心
      //(-1 , 1)
      //最左上角(-1躁绸, -1)
      //最右下角(1裕循, 1)
      // alignment: Alignment(0, -1),
    );
  }
}


3.2. 加載本地圖片

  1. 在flutter項(xiàng)目中創(chuàng)建一個(gè)文件夾,存儲圖片涨颜;
  • 注意:flutter中2倍圖费韭、3倍圖,是不需要添加@2x/@3x的庭瑰,但是藍(lán)湖上下載的倍圖自帶@2x/@3x星持,可參考博客:http://www.reibang.com/p/6df4663a7a14
    image_flutter
  1. pubspec.yaml進(jìn)行配置;
assets:
    - assets/images/
  • 注意2:assets空格敏感弹灭;

    yaml_assets.png

  • 注意3: 執(zhí)行以下命令行:flutter packages get;
    - 如果Waiting for another flutter command to release the startup lock...
    - 執(zhí)行: Linux killall -9 dart, Windows taskkill /F /IM dart.exe督暂;
    - 或:刪除 flutter 安裝目錄下的 bin/cache/lockfile 文件揪垄;

  1. 使用圖片
class YZHomeContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Image.asset("assets/images/image_01.png",width: 200, height: 150);
  }
}

3.2.1. 占位圖

@override
  Widget build(BuildContext context) {
    return FadeInImage(
        placeholder: AssetImage("assets/images/image_01.png"),
        image: NetworkImage(imageUrl)
    );
  }

3.3. icon

 @override
  Widget build(BuildContext context) {
    return Icon(Icons.pets);
  }

4. TextField

4.1. 基本屬性

class YZHomeContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Column(
        children: [
          TextField(
            decoration: InputDecoration(
              labelText: "username",
              icon: Icon(Icons.people),
                hintText: "請輸入用戶名",
                border: OutlineInputBorder(),
              filled: true,
              fillColor: Colors.red[100],
            ),
          ),
        ],
      ),
    );
  }
}

WechatIMG941.jpeg

4.2. 監(jiān)聽輸入框

4.2.1 監(jiān)聽輸入

onChanged: (value) {             
   print(value);            
},

4.2.2 監(jiān)聽輸入完成

onSubmitted: (value) {             
   print(value);            
},

4.3. 獲取TextField中的內(nèi)容

WechatIMG43.jpeg
class _YZHomeContentState extends State<YZHomeContent> {
  final userNameTextFieldController = TextEditingController();
  final passwordTextFieldController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Column(
        children: [
          TextField(
            controller: userNameTextFieldController,
            decoration: InputDecoration(
              labelText: "username",
              icon: Icon(Icons.people),
              hintText: "請輸入用戶名",
              border: OutlineInputBorder(),
              filled: true,
              fillColor: Colors.red[100],
            ),
            onChanged: (value) {
              print(value);
            },
            onSubmitted: (value) {
              print(value);
            },
          ),
          SizedBox(height: 20),
          TextField(
            controller: passwordTextFieldController,
            decoration: InputDecoration(
              labelText: "password",
              icon: Icon(Icons.lock),
              hintText: "請輸入密碼",
              border: OutlineInputBorder(),
            ),
          ),
          SizedBox(height: 20),
          Container(
            width: double.infinity,
            height: 40,
            child: FlatButton(
              child: Text("登錄", style: TextStyle(fontSize: 20, color: Colors.white),),
              color: Colors.blue,
              onPressed: (){

                //獲取用戶名密碼
                final username = userNameTextFieldController.text;
                final password = passwordTextFieldController.text;
                print("賬號:$username 密碼:$password");
              },
            ),
          ),
        ],
      ),
    );
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逻翁,隨后出現(xiàn)的幾起案子饥努,更是在濱河造成了極大的恐慌,老刑警劉巖八回,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酷愧,死亡現(xiàn)場離奇詭異,居然都是意外死亡缠诅,警方通過查閱死者的電腦和手機(jī)溶浴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來管引,“玉大人士败,你說我怎么就攤上這事∪彀椋” “怎么了谅将?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長重慢。 經(jīng)常有香客問我饥臂,道長,這世上最難降的妖魔是什么伤锚? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任擅笔,我火速辦了婚禮,結(jié)果婚禮上屯援,老公的妹妹穿的比我還像新娘猛们。我一直安慰自己,他們只是感情好狞洋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布弯淘。 她就那樣靜靜地躺著,像睡著了一般吉懊。 火紅的嫁衣襯著肌膚如雪庐橙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天借嗽,我揣著相機(jī)與錄音态鳖,去河邊找鬼。 笑死恶导,一個(gè)胖子當(dāng)著我的面吹牛浆竭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼邦泄,長吁一口氣:“原來是場噩夢啊……” “哼删窒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起顺囊,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤肌索,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后特碳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诚亚,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年测萎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亡电。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硅瞧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恕汇,到底是詐尸還是另有隱情腕唧,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布瘾英,位于F島的核電站枣接,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缺谴。R本人自食惡果不足惜但惶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望湿蛔。 院中可真熱鬧膀曾,春花似錦、人聲如沸阳啥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽察迟。三九已至斩狱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扎瓶,已是汗流浹背所踊。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留概荷,地道東北人秕岛。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓣蛀。 傳聞我的和親對象是個(gè)殘疾皇子陆蟆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348