dart系列之:浏览器中的舞者,用dart发送HTTP请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dart系列之:浏览器中的舞者,用dart发送HTTP请求相关的知识,希望对你有一定的参考价值。
参考技术A dart:html包为dart提供了构建浏览器客户端的一些必须的组件,之前我们提到了HTML和DOM的操作,除了这些之外,我们在浏览器端另一个常用的操作就是使用XMLHttpRequest去做异步HTTP资源的请求,也就是AJAX请求。dart同样提供了类似JS中XMLHttpRequest的封装,其对应的类叫做HttpRequest,一起来看看在dart中怎么使用HttpRequest吧。
虽然现代的web APP被各种框架所封装,但是归根结底他还是一个AJAX的富客户端应用。我们通过各种异步的HTTP请求向服务器端请求数据,然后展示在页面上。一般来说数据的交互格式是JSON,当然也可以有其他的数据交互格式。
AJAX中最常用的方式就是向服务器端发送get请求,对应的HttpRequest有一个getString方法:
注意,getString方法是一个类方法,所以直接使用HttpRequest类来调用:
因为getString返回的是一个Future,所以可以直接在getString后面接then语句,来获取返回的值。
当然,你也可以在async方法中使用await来获取返回值。
或者使用try catch来捕获异常:
GET是从服务器拉取数据,相应的POST就是通用的向服务器中提交数据的方法。在HttpRequest中,对应的方法是postFormData:
从方法的实现上可以看到,默认情况下使用的Content-Type: application/x-www-form-urlencoded; charset=UTF-8, 也就是说默认是以form表单提交的形式进行的。
在这种情况下,对于承载数据的data来说,会首先进行Uri.encodeQueryComponent进行编码,然后再使用&进行连接。
下面是使用的例子:
上面我们讲解了get和form的post,从代码可以看到,他们底层实际上都调用的是request方法。request是一个更加通用的HTTP请求方法。可以支持 POST , PUT , DELETE 等HTTP操作。下面是request的方法定义:
其中sendData可以是[ByteBuffer],[Blob], [Document], [String], 或者 [FormData] 等格式。
responseType表示的是HttpRequest.responseType,是返回对象的格式,默认情况下是String,也可以是’arraybuffer’, ‘blob’, ‘document’, ‘json’, 或者 ‘text’。
下面是一个是直接使用request的例子:
使用HttpRequest可以直接模拟浏览器中的Ajax操作,非常方便。
dart系列之:dart类的扩展
文章目录
- 简介
- 使用extends
- 抽象类和接口
- mixins
- 总结
虽然dart中的类只能有一个父类,也就是单继承的,但是dart提供了mixin语法来绕过这样限制。
今天,和大家一起来探讨一下dart类中的继承。
使用extends和JAVA一样,dart中可以定义一个父类,然后使用extends来继承他,得到一个子类,如下所示:
class Student{
}
class Boy extends Student{
}
在子类中,可以使用super关键词来调用父类的方法。
抽象类和接口dart中除了继承普通类之外,还可以继承抽象类和实现接口。
抽象类是以abstract关键词修饰的class,如下所示:
abstract class Student{
String getName();
}
抽象类中通常会有抽象方法,抽象方法需要在子类中进行实现。
当然抽象类中也可以有具体实现的方法,但是抽象类不可以被实例化,如果你想在抽象类中实例化对象,这可以使用之前我们提到的工厂构造函数。
和java不同的是,dart中并没有interface,他引入的是一个Implicit interfaces的概念。
对应每个对象来说,都隐式定义了一个包含类中所有方法和属性的接口。
一般来说,如果一个对象包含另外一个对象的结构和方法,但是他们之间的内容又是不一样的,则可以使用implements来隐式实现接口,如下所示:
class Student{
String name;
String get _name => name;
}
class Girl implements Student{
@override
String name;
@override
String get _name => "girls";
}
在dart中一个类可以implements多个接口。
上面的例子中,我们用到了@override注解,他表示子类对父类方法或者属性的重写。
在使用@override中,我们需要注意的是,子类对父类的实现会有下面几个限制:
- 子类的实现方法的返回值,必须和父类返回值相同,或者是父类返回值的子类。
- 子类的实现方法的参数,必须和父类方法参数相同,或者是父类参数的父类。
- 子类方法的参数必须和父类的参数个数相同。
虽然dart不支持多重继承,但是可以使用mixin来实现类似多重继承的功能。
要使用mixins,可以使用关键字with,如下所示:
class Boy extends Student with Person {
// ···
name=boy;
myName();
}
在dart中mixin是一个特殊的类,使用关键词mixin来描述,mixin的类中,没有构造函数,如下所示:
mixin Person {
String name=;
void myName() {
print(my name is:+name);
}
}
在mixin中可以定义有用的方法和属性,继承mixin的类可以重写对应的属性和方法,从而达到自定义的功能。
在mixin中我们也可以指定特定的类,也就是说只有特定的类才能够使用mixin,则可以使用关键词on,如下所示:
mixin Person on Boy{
String name=;
void myName() {
print(my name is:+name);
}
}
总结
以上就是dart中继承的使用,dart中还可以继承方法,这是dart的高级应用,我们会在后续的文章中进行介绍,敬请期待。
以上是关于dart系列之:浏览器中的舞者,用dart发送HTTP请求的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点#dart系列之:HTML的专属领域,除了javascript之外,dart也可以