一、配置环境
参考文献 : blog.csdn.net/pengyouyoup…
-
brew tap dart-lang/dart
-
brew install dart
dart --version
-
vs-code 安装dart环境
-
vscode 安装 code runner 插件
-
mac vscode 卸载所有扩展
-
vscode 不提示问题
配置Flutter环境
配置好环境之后
-
sudo fullter create flutterdemo
-
获取文件权限
cd Desktop/FlutterDemo
sudo chmod -R 777 *
cd Desktop/FlutterDemo/flutterdemo
sudo chmod -R 777 *
-
然后打开Xcode 跑一下试试
-
调试可以使用vscode
-
点击控制端 点击R 就是热更新
-
点击O切换设备
-
点击P看图层分布
快捷键
shift + alt + f 快速格式化代码
常用地址
Icons图标库 www.aliyue.net/9310.html
pub地址 pub.dev/
时间处理 pub.dev/packages/da…
日期控件 pub.dev/packages/fl…
错误集
-
Error: Cannot run with sound null safety, because the following dependencies don't support null safety
依赖包不支持空安全
flutter run --no-sound-null-safety flutter build apk --no-sound-null-safety
二、 基础语法
2.1 变量常量
var str = "nihao";
str = "hellow";
print(str);
String b = "string";
print(b);
const a = 1;
print(a);
final str2 = "aaa";
print(str2);
final tiemr = new DateTime.now();
print(tiemr);
// 1、Dart 支持 var const 动态定义。 也支持 , String Int 静态编译
// 2、final 和 const 的区别是。 final 支持动态编译。 例如 new DateTime.now(); 这个const 就不支持
2.2 数据类型
// 字符串拼接
var str1 = "hellow";
var str2 = "word";
final str3 = str1 + str2;
final str4 = "$str1 $str2";
print(str3);
print(str4);
int a = 3;
double b = 2.12;
// int c = a + b; 报错
double d = a + b;
print(d);
bool have = true;
if (have) {
print("object");
}
var list = ["hellow", 21, 3];
var list2 = <int>[1, 2, 3];
list.add("3");
list2.removeAt(1);
print(list2);
print(list.length);
var array = List.filled(2, "");
var array2 = List<String>.filled(2, "");
array[0] = "bu";
array2[1] = "aa";
print(array2);
// map 创建的两种方式
// 1
var person = {
"name" : "shuai",
"age" : 18
};
// 2
var dog = new Map();
dog["name"] = "gou";
print(person["name"]);
print(dog["name"]);
// is 类型判断
var a = "strng";
if (a is String) {
print("a 是字符串");
}
2.3 类型转换
// 字符串转数字类型
String age = "18";
int age2 = int.parse(age);
print(age2);
// 数字类型转字符串
var name = age2.toString();
print(name is String);
print(name.isEmpty);
print(age2.isNaN);
2.4 循环
var list = ["篮球", "足球", "品棒球", "台球"];
for (var i = 0; i < list.length; i++) {
if (i == 1) {
continue; // 当前循环结束
}
print(list[i]);
}
print("=============================");
for (var i = 0; i < list.length; i++) {
if (i == 1) {
break; // 跳出循环
}
print(list[i]);
}
print("=============================");
for (var item in list) {
print(item);
}
2.5 函数
main(List<String> args) {
// function();
// print(ageNumber(13));
// userInfo("xiaowu", 19);
// setuserInfo("xiaowu", age: 111, sex: "aa");
// var fn = () {
// print("这是一个匿名函数");
// };
// noNameFunction(fn);
}
void function() {
print("这是基础函数");
}
int ageNumber(int age) {
return age + 1;
}
// 可选参数
void userInfo(String name, [int age=0, String sex=""]) {
print(name);
print(age);
print(sex);
}
// 命名参数
void setuserInfo(String name, {int age = 18, String sex =""}) {
print(name);
print(age);
print(sex);
}
void noNameFunction(fn) {
fn();
}
2.6 数组的高阶函数
- forEach 遍历
- map 遍历的同时修改item 并返回一个数组。
var list = ["篮球", "足球", "品棒球", "台球"];
for (var value in list) {
print(value);
}
print("=============================");
list.forEach((element) {
print(element);
});
print("=============================");
list.forEach((value) => {
print(value)
});
print("=============================");
var numberList = [1, 2, 3, 4];
var newList = numberList.map((value){
if (value > 2) {
return value * 2;
}
return value;
});
print(newList.toList());