Flutter之Dart入门

一、准备

在IDEA上练习Dart,首先要安装Dart插件。
下载Dart SDK:http://www.gekorm.com/dart-windows/

1.下载Dart插件:

在这里插入图片描述

2.重启IDEA后,配置Dart SDK

在这里插入图片描述

3.运行

void main(){
  print("hello!");
}

二、Dart变量

var修饰变量,未初始化的变量初始值为null,即使变量是int类型。可不指定类型,会自动推断:

//  var name='husky';
//  String name='husky';//显示声明类型
//  Object name='husky';//若对象不限于单一类型,可定义为Object或者dynamic
  final name='husky';//变量不会在变化了,且final变量只能设置一次
  print(name);

const可定义编译时常量,也可用static const定义类

  //创建常量的值
//  var husky=const[];
//  const husky=[];
  final husky=const[];

三、基本数据类型

3.1Number

包含有int(不大于64位的整数值)和double(64-bit 双精度浮点数)

3.2String

Dart 字符串是 UTF-16 编码的字符序列,可以使用单引号或者双引号

  var s1="husky";
  var s2='husky';

当然也可以在字符串中使用表达式:

print('哈士奇是:+$s1');

使用3对单引号或双引号,可创建多行字符串:

  var s3='''
  num1
  num2
  ''';
  var s4="""
  num1
  num2
  """;

3.3 Boolean

Dart是强bool类型检查

bool isTrue=true;
  if(isTrue){
    print("这是true");
  }

3.4 List

var list=[1,2,3];
  print(list.length);

3.5 Set

set是一组无序的集合

  var set=['a','b','c'];
  var set2=<String>{};//创建空set
  set2.add('a');

3.6 Map

K-V可以是任意类型的对象,K是唯一的

  var map={1:'a',2:'b'};
  //Map构造
  var map2=new Map();
  map2[1]='a';
  map2[2]='b';

四、函数

函数可以赋值给变量,也能当做其他函数的参数

//直接在main方法中调用:showName('my name is husky');
void showName(String name){
  print(name);
}

4.1 可选参数

①可选命名参数
通过使用paramName:value的方式指定参数名称,得知参数含义

//调用
show(paramName:String);
//定义
void show({Type paramName}) {
  print(paramName);
}

②可选位置参数
把函数的参数放入到[]中

//调用show('a','husky');
void  show(String s,[String name]) {
  var result='传进来的是:$s';
  if(name!=null){
    result='$result 和 $name';
  }
  print(result) ;
}

4.2默认无参数值

可以使用 = 来定义可选参数的默认值, 默认值必须是编译时常量。 如果没有提供默认值,则默认值为 null

//调用:show('a');show('a','hello');
void  show(String s,[String name='husky']) {
  var result='传进来的是:$s';
  if(name!=null){
    result='$result 和 $name';
  }
  print(result) ;
}

4.3 mian函数

是程序的入口,返回值是void

//调用:printName('husky');
void printName(String s) {
  print('name is $s');
}

4.4 匿名函数

格式:

([[Type] param1[,]]) { 
  codeBlock; 
};

定义参数为i的匿名函数:

//匿名函数
var list=['a',"b","c"];
  list.forEach((i){
    print(list.indexOf(i).toString()+":"+i);
  });

五、流程控制

5.1 for循环

var msg=new StringBuffer('a');
  for(var i=0;i<3;i++){
    msg.write(i);
    print(i);
  }

for - in形式遍历:

var list=[1,2,3];
  for (var l in list){
    print(l);
  }

5.2 switch case

Switch语句比较整型、字符串或者编译时常量,被比较的对象必须都是同一个类的实例(不能是其子类),并且这个类不允许覆写 ==

String s='husky';
  switch(s){
    case 'a':
      print('a');
      break;
    case 'husky':
      print("husky");
      break;
  }

六、捕获异常

on指定异常类型,catch捕获异常对象,finally最终执行

try {
   //...
} catch(e) {
  print('Error: $e');  
} finally {
   //...
}
try {
  //...
} on OutOfLlamasException {
  //...
} on Exception catch (e) {
  print('Unknown exception: $e');
} catch (e) {
  print('Something really unknown: $e');
}

七、多继承

类似于scala,通过with实现多继承。

class Animal{
  run(){
    print('跑');
  }
}
class Dog{
  eat(){
    print('吃');
  }
}
class Husky extends Animal with Dog{
  String name;

  Husky(String name){
    this.name=name;
  }

}

调用:

  var dog=new Husky('husky');
  dog.run();
  dog.eat();

八、引入库

使用import来引入一个库,对于Dart语言内置的库:

import 'dart:io';

对于第三方的库:

import 'package:mylib/mylib.dart';

若导入的库名字出现冲突,可使用前缀来做区分:

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

Element element1 = new Element();           //使用lib1中的Element
lib2.Element element2 = new lib2.Element(); //使用lib2中的Element

当然也可以选择导入库的部分内容:

// show表示只导入foo
import 'package:lib1/lib1.dart' show foo;

// hide表示除了foo,其他部分都导入
import 'package:lib2/lib2.dart' hide foo;

延迟加载库:

//首先使用deferred as来导入
import 'package:deferred/hello.dart' deferred as hello;

//使用的时候再去加载
greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

九、异步支持

Dart库中包含许多返回Future或Stream对象的异步函数,完成基本操作后不会阻塞,而是立刻返回。其中,使用await,方法必须带有async

FileOperate() async {
var file= await readFile()
//其他处理
}

十、使类可调用

如果类中实现了call()函数,那么这个类就可以当做方法被调用

class function{
  call(String a,String b)=>'$a+$b';
}

main中调用:

  var f=new function();
  var result=f('husky','--->eat');
  print(result);

十一、创建实例

对于实例的创建,可new可不new

var f=new function();
var f=function();
发布了197 篇原创文章 · 获赞 245 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_36299025/article/details/99294046