Flutter学习笔记

1.Dart之闭包的使用

之前写Java和C#的时候,如果想让多个调用的方法,共享一个变量,那这个变量的作用域起码应该是不能太小的,或者通过传递引用实现,在Dart里面可以尝试使用闭包的方案,代码如下:

  fn() {
    int i = 10;
    return () {
      i++;
      print(i);
    };
  };
  var f = fn();
  f();
  f();
  f();

这个fn在dart里面是内部方法,在一个方法内部定义。然后它返回一个匿名方法并命名为f,然后通过f(),调用这个方法。就达到了三次执行f方法共享i的目的。这种写法在Dart里面叫闭包。闭包可以让一个变量既有全局变量的特点,又有局部变量的特点。

2.Dart语言没有访问修饰符(private、public),如果希望让某个属性权限是private,则需要在变量名前加"_":

  String _name;
  void setName(String value) 
  {
    _name = value;
  }

  String getName() 
  {
    return _name;
  }

方法也是一样的:

  //private
  void _fun() 
  {
    
  }
  //public
  void fun() 
  {
    
  }

需要注意的是,要让私有方法或者属性生效,要求必须是在不同的类文件中。两个类如果在同一个文件中,那么这个私有特性是不生效的。

3.自执行方法:

  ((int n) {
    print(n);
    print('我是自执行方法');
  })(12);

4.默认构造函数:

class model 
{
  String name;
  String id;
  model(String name,String id)
  {
    this.name=name;
    this.id=id;
  }
}

可以简写为:

class model 
{
  String name;
  String id;
  model(this.name,this.id);
}

Dart不支持默认构造函数的重载,如果想实现重载的效果,则使用命名构造函数。

5.命名构造函数:

class model 
{
  String name;
  String id;
  model(this.name,this.id);
  model.setName(String name)
  {
    this.name=name;
  }
}

setName(String name)便是命名构造函数。它同样支持简写:

class model 
{
  String name;
  String id;
  model(this.name,this.id);

  model.setName(this.name);
}

使用方法如下:

var v=model.setName('name');

6.getter和setter。这个有些像c#里面的属性,它也是一种属性,所以不能和普通的属性重名:

class model 
{
  String name;
  String id;
  String _sex;
  get all{
    return '${this.name}+${this.id}+${this._sex}';
  }
  set setSex(sex){
    this._sex=sex;
  }
}

它是一种组合属性,普通的属性不是很灵活,用这种方法定义属性之后,就灵活很多了。

7.联缀操作,用..来进行一系列操作:

main(List<String> arguments) {
  Staff u=Staff();
  u..id="test"
   ..name='ceshi'
   ..printInfo();
   
}

class Staff
{
  String id;
  String name;
  void printInfo()
  {
    print('id:$id,name:$name');
  }
}

8.Dart里面没有接口,要实现类似的功能,用抽象类来实现,下面的两种继承是有区别的,使用extends表示将抽象类当成普通抽象类来使用,使用implements表示把抽象类当成接口来使用,那么实现类必须全部重写抽象类定义的方法。

abstract class DbService
{
  insert();
  bool delete();
  void add()
  {
    print('add');
  }
}

class MySql implements DbService
{
  @override
  bool delete() {
    // TODO: implement delete
    return null;
  }
  @override
  insert() {
    // TODO: implement insert
    return null;
  }
  @override
  void add() {
    // TODO: implement add
  }
}
class Postgresql extends DbService
{
  @override
  bool delete() {
    // TODO: implement delete
    return null;
  }
  @override
  insert() {
    // TODO: implement insert
    return null;
  }
}

9.使用with关键字实现多继承:

//A和B都必须继承object,不能继承其他的,同时都不能有构造函数
//如果A和B有同样的方法,后面的会覆盖前面的
class A
{}
class B
{}
class C with A,B
{
  
}

10.泛型,和C#写法差不多:

T test<T>(T t) {
  return t;
}

11.Dart引用库的时候可以指定部分可见:

添加一个测试文件tool.dart,并写三个方法:

  void get()
  {}
  void set()
  {}
  void delete()
  {}

使用时:

import 'tool.dart' hide set;

main(List<String> arguments) {
  get();
  delete();
}

或者:

import 'tool.dart' show delete,set;

main(List<String> arguments) {
  set();
  delete();
}

show和hide用来控制哪些引用,哪些不引用。

12.第三方库的使用,第三方库的地址:https://pub.dev/packages

需要什么库,直接在里面搜索就可以了,找到后,在项目的pubspec.yaml加上依赖,编译器(我用的是vs code)就会自动下载:

dependencies:
  http: ^0.12.0+2
  date_format: ^1.0.6

也可以参考网站里面的Installing页面提供的方法进行下载引用:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值