作为一个 iOS开发者暂时不必要完全去看Dart的语法,因为每个语言都差不多有对应的语法糖,所以这里先简单介绍几种目前入门学习足够的对应语法。
构造、析构
Dart 和 Swift 或者 OC一样提供一个默认的构造方法,默认同名比如:
Class DartTestClass {
}
同名构造函数
他的默认构造方法是:
DartTestClass()
另外我们也可以自定义构造函数
Class DartTestClass {
String name ;
String text;
/// 自定义构造函数
DartTestClass(this.name, this.text)
自定义构造函数按照传入参数的顺序赋值,不需要手动 name = name 这种
}
/// const 构造函数 这里要求构造的内容全是 final 修饰 (不可变属性 final String name;)
Class DartTestClass {
final String name ;
final String text;
const DartTestClass(this.name, this.text)
}
/// 可选构造函数 用'{}' 修饰的参数
Class DartTestClass {
String name ;
String text;
/// 调用可选参数必须有形参 必须是可变参数不能用 final 修饰
DartTestClass(this.name, {this.text})
}
/// 匿名构造函数 通过数组构造对象 匿名构造函数同样不可以有 final 修饰的参数
Class DartTestClass {
String name ;
String text;
DartTestClass.fromList(List<dynmic> list) {
name = list[0];
text = list[1];
}
}
/// 重定向构造函数
/// 调用另一个构造函数
Class DartTestClass {
String name ;
String text;
DartTestClass.defaults(String name):this(name)
}
以上是构造函数,以上也写了 final 修饰的变量为不可变变量
字符串拼接:
final String name = 'namen';
final String pinjie = '${name}:name';
方法定义
返回值类型 方法名称(参数类型 参数形参, 参数类型 参数形成) {
方法体
}
Widget cellForRow(Int index) {
}
以上Dart语法简单介绍,根据以上介绍应该能大概理解Dart语法,以后有机会再详细写Dart
布局属性介绍 Container
Containet (
alignment: Alignment(0, 0) // 参数 x y (0 0) 在Container 的中心点 iOS是左上角 取值范围 -1 ~1
colors: Colors.white // 背景色
padding: EdgeInsets.all(10)// 内间距
margin: EdgeInsets.all(10) // 外间距 即绘制完本体所有子视图(小部件)之后子部件相对父小部件的距离。
child: Widget()// 之前说过我理解为layer 因为是唯一的 相对的有 Colum 、 Row 、 Stack 部件有 children 是传入多个小部件
)
Row Colum
#主轴
// Row 的主轴 是 X 轴 ,第一个元素在最左侧, Colum 是 Y 轴,第一个元素的位置在colum上边对齐, Stack 是 Z 轴 第一个元素在Stack的最中间对齐
// 这个相对位置的起点是可以改变的 mainAxisAlignment 属性可修改这个值的起点
// mainAxisAlignment.spaceAround 代表剩下的空间平均分布到小部件的周围
// start 是默认起点
// end 默认起点的反方向为默认起点
// center 整体居中
// mainAxisAlignment.spaceBetween 剩下的空间平均分布到小部件之间
// mainAxisAlignment.spageEvenly包括小部件所占大小一期平均缝补
#交叉轴
// 与主轴垂直的轴的排列 Stack除外 默认 center
// CrossAxisAlignment.start
// CorssAxisAlignment.end
#textBaseline
// 这个属性需要自己设置一下中英文情况下的区别 一下就能看见区别
// 英文比中文效果好一些
// alphabetic 英文字符
// ideographic 中文字符
Expanded
填充布局
被Expanded部件包裹的小部件之间会没有间距
Stack
部件positioned(
left:0 ,// 部件在最左侧显示
right:10,
top
bottom
child: 部件
)
针对Stack 内部的部件进行布局
AspectRadio 按照宽高比
AspectRadio(
height: 100,
width: 200,
aspectRadio: 2 / 1,// 设 child 后面的 宽高比 但是如果设置了 heigit width 会显示对应的 height width ,height width 优先级更高
child: Widget
)
Stateful
有状态小部件 代表是 可变小部件格式是这样
class StatefulDemo extends StatefulWidget {
@override
_StatefulDemoState createState() => _StatefulDemoState();
}
class _StatefulDemoState extends State<StatefulDemo> {
int count = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
// 布局
body: Center(
child: Chip(label: Text('$count')),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
/// setState 内部的变化会实时更新
setState(() {
count++;
});
print('count = $count');
},
),
);
}
}
需要一个部件和一个状态类
最后调用 setState 方法修改 setState 内部关联的 UI
下一篇:开始创建一个项目
网友评论