旅游网站开发流程,怎么做一个自己网站,做网站哪家公司好,宣传型电子商务网站因为工作的需要#xff0c;也为了个人发展#xff0c;现在的话#xff0c;转战Flutter跨端开发了#xff0c;虽然目前的项目只发了android端#xff0c;但是那天尝试了一下Ios的打包流程#xff0c;也能运行#xff0c;只是IOS那边的打包稍微复杂一些。
差不多学习了一…因为工作的需要也为了个人发展现在的话转战Flutter跨端开发了虽然目前的项目只发了android端但是那天尝试了一下Ios的打包流程也能运行只是IOS那边的打包稍微复杂一些。
差不多学习了一周了现在项目也在入手开始写了总的来说Android转Flutter不难Android原生应用就是指使用Java或Kotlin语言直接调用Android SDK开发的应用程序而iOS原生应用就是指通过Objective-C或Swift语言直接调用iOS SDK开发的应用程序Flutter开发用心学学很快就上手了语言虽然用的是Dart但是很好入门现在的高阶语言都是缝合怪。
目前入门的话有中文的Flutter开发社区里面的东西简单易懂可以去看看。
文章仅作个人总结
一、什么是Flutter
Flutter 是 Google 推出并开源的移动应用开发框架主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开发 App一套代码同时运行在 iOS 和 Android平台。 Flutter 提供了丰富的组件、接口开发者可以很快地为 Flutter 添加 Native即原生开发指基于平台原生语言来开发应用flutter可以和平台原生语言混合开发 扩展
二、Dart语言简介
1、var 关键字 作用声明一个变量
var t hi world;
// 下面代码在dart中会报错因为变量t的类型已经确定为String
// 类型一旦确定后则不能再更改其类型。
t 1000;
2.final和const 关键字 声明一个变量
如果您从未打算更改一个变量那么使用 final 或 const不是var也不是一个类型。 一个 final 变量只能被设置一次两者区别在于const 变量是一个编译时常量编译时直接替换为常量值final变量在第一次使用时被初始化。被final或者const修饰的变量变量类型可以省略如
//可以省略String这个类型声明
final str hi world;
//final String str hi world;
const str1 hi world;
//const String str1 hi world;
3.dynamic 和 Object 声明一个对象
Object 是 Dart 所有对象的根基类也就是说在 Dart 中所有类型都是Object的子类(包括Function和Null)所以任何类型的数据都可以赋值给Object声明的对象。 dynamic与Object声明的变量都可以赋值任意对象且后期可以改变赋值的类型这和 var 是不同的如
dynamic t;
Object x;
t hi world;
x Hello Object;
//下面代码没有问题
t 1000;
x 1000;
dynamic与Object不同的是dynamic声明的对象编译器会提供所有可能的组合而Object声明的对象只能使用 Object 的属性与方法, 否则编译器会报错如: dynamic a;Object b ;main() {a ;printLengths();} printLengths() {// 正常print(a.length);// 报错 The getter length is not defined for the class Objectprint(b.length);}
dynamic 的这个特点使得我们在使用它时需要格外注意这很容易引入一个运行时错误比如下面代码在编译时不会报错而在运行时会报错
print(a.xx); // a是字符串没有xx属性编译时不会报错运行时会报错4.空安全检查机制和kotlin一样
5.函数声明
bool isNoble(int atomicNumber) {return _nobleGases[atomicNumber] ! null;
}Dart函数声明如果没有显式声明返回值类型时会默认当做dynamic处理注意函数返回值没有类型推断。函数和kotlin一样可以作为变量参数进行传递
6.mixin
Dart 是不支持多继承的但是它支持 mixin简单来讲 mixin 可以 “组合” 多个类。
类似于kotlin的单继承extends多继承implements
class Man extends Person with Eat, Walk, Code{}7.异步支持
1.Future
Future表示一个异步操作的最终完成或失败及其结果值的表示。简单来说它就是用于处理异步操作的异步处理成功了就执行成功的操作异步处理失败了就捕获错误或者停止后续操作。一个Future只会对应一个结果要么成功要么失败。
1.Future.then
例如Dio网络请求库中的request方法返回的就是一个Future对象 FutureResponseT requestT(String url, {Object? data,MapString, dynamic? queryParameters,CancelToken? cancelToken,Options? options,ProgressCallback? onSendProgress,ProgressCallback? onReceiveProgress,});
我们在请求一个接口后调用then方法接收异步结果
GlobalRepository.appUpdate().then((ApiModel res) {
//GlobalRepository.appUpdate()是一个Future对象if (res.apiSuccess()) {VersionModel resModel VersionModel.fromJson(res.data);if (resModel.update true) {DialogUtil.showUpdateAppDialog();}}});
直接调用
Future.delayed(Duration(seconds: 2),(){return hi world!;
}).then((data){print(data);
});
2.Future.catchError
如果异步任务发生错误我们可以在catchError中捕获错误我们将上面示例改为
Future.delayed(Duration(seconds: 2),(){//return hi world!;throw AssertionError(Error);
}).then((data){//执行成功会走到这里 print(success);
}).catchError((e){//执行失败会走到这里 print(e);
});
3.Future.wait
有些时候我们需要等待多个异步任务都执行结束后才进行一些操作可以使用Future.wait
例如项目中需要同时抓取各种数据使用此方法可以等多个接口返回后在执行下面的代码
2.async/await
消除回调地狱(Callback Hell)类似于C接口等待B接口的结果B接口等待A接口的结果在有时候会写出很傻很长的代码。
task() async {try{String id await login(alice,******);String userInfo await getUserInfo(id);await saveUserInfo(userInfo);//执行接下来的操作 } catch(e){//错误处理 print(e); }
} async用来表示函数是异步的定义的函数会返回一个Future对象可以使用 then 方法添加回调函数。 await 后面是一个Future表示等待该异步任务完成异步完成后才会往下走await必须出现在 async 函数内部。 上面的代码会一行一行的执行
8.循环
for (var i 0; i 10; i) {// 循环体
}var list [1, 2, 3];
for (var item in list) {// 循环体
}while (condition) {// 循环体
}do {// 循环体
} while (condition); 其余好像没啥了都比较简单。
个人建议简单的东西看看文章官方文档就行了没必要去看视频啥的真的慢。
后面会总结flutter常用的开发组件常用库的使用自己平时开发中的一些点