首先我们来了解下什么Widget
,其实就是相当于iOS开发中的UIView
,在dart
中Widget
分为两大类
-
StatefulWidget (有状态Widget)
状态是在构建
widget
时可以同步读取的信息,或者在widget
的生命周期
中可能更改的信息,在Flutter
中如果要管理状态
需要用到StatefulWidget
。
-
StatelessWidget(无状态Widget)
Flutter
中的StatelessWidget
是一个不需要状态更改的widget
- 它没有要管理的内部状态。
以上我们先简单介绍下Widget,后面我们用到再详细讲,下面我们来看看如何定义一个Widget
,我们还是用上次的demo
的里的代码,把Text Widget
抽取出来定义成MyWidget
class MyWidget extends StatelessWidget {
}
那如何把我们的Widget
渲染到页面上呢,其实有个build
方法,build
方法return
什么就会渲染什么,我们来写下build
方法
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Text('Hello Flutter', textDirection: TextDirection.ltr,)
);
}
}
然后我们把main
函数里改下
void main(){
runApp(
MyWidget()
);
}
运行下跟我们之前的效果是一样的
最后我们说下dart
的一个语法,当一个函数只有一行代码
执行的时候,可以去掉大括号
然后改成箭头
,最后我们精简完就是下面这个样子
void main() => runApp(MyWidget());
文字样式
接下来我们来研究先Text
这个Widget,我们点击去Text
类里查看下
const Text(
this.data, {
Key key,
this.style,
this.strutStyle,
this.textAlign,
this.textDirection,
this.locale,
this.softWrap,
this.overflow,
this.textScaleFactor,
this.maxLines,
this.semanticsLabel,
this.textWidthBasis,
})
const Text()
是个构造函数,里面的this.XXXX
都是属性而且是可选的
,我们看见它有个style
属性,我们来设置下看看
import 'package:flutter/material.dart';
void main() => runApp(MyWidget());
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Text(
'Hello Flutter',
textDirection: TextDirection.ltr,
style: TextStyle(color: Colors.red, fontSize: 40, fontWeight: FontWeight.bold),
));
}
}
我们保存下代码直接热重装看看效果
我们把代码整理下,style抽出来
import 'package:flutter/material.dart';
void main() => runApp(MyWidget());
class MyWidget extends StatelessWidget {
@override
final _textStyle = TextStyle(
color: Colors.red,
fontSize: 40,
fontWeight: FontWeight.bold
);
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Text(
'Hello Flutter',
textDirection: TextDirection.ltr,
style: _textStyle,
));
}
}
是不是发现我们的
_textStyle
很像CSS
啊,还有就是大家有没有觉得有了hot reload
之后写UI爽歪歪啊
明天我们来说说MaterialApp
和ListView
这两个组件
喜欢的朋友可以扫描关注我的公众号(多多点赞,多多打赏,您的支持是我写作的最大动力)
iOS_DevTips