Flutter 学习 - Dart

174 阅读2分钟

一、配置环境

参考文献 : blog.csdn.net/pengyouyoup…

  1. brew tap dart-lang/dart

  2. brew install dart

    dart --version

  3. vs-code 安装dart环境

  4. vscode 安装 code runner 插件

配置Flutter环境

www.cnblogs.com/chzheng/p/1…

配置好环境之后

  • 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());