Flutter与原生Android对比:
1.安装包:
flutter 版的 apk 大小会比 android 原生的多出约 6M 左右,其中核心引擎大约 3.2MB,框架+应用程序代码大约是 1.25MB,必需的 Java 代码 .dex 将近 60k,而 assets 文件里还约有 2.1MB 的 ICU 数据等,单纯从安装包上来说,原生是要优于 flutter 的。
2.性能:
flutter 应用在 CPU 和内存的资源占用上会比原生方式多一些,所以单纯的从性能上来说,android 原生是肯定要优于 flutter 的,但是从用户体验上来说,两者的滑动同样顺畅无比,几乎感觉不到差别。
android 原生在内存、CPU 资源占用方面要低于 flutter,并且安装包的体积也要小于 flutter,所以,不考虑其他因素,单纯从性能角度来说,android 原生肯定是要优于 flutter 的。但 flutter 也有它的优点,比如跨平台的开发、毫秒级的热重载等等,另外跨端开发也逐渐的流行起来,所以,我们在学好android原生的基础上,对跨端开发也要抱有积极的心态。
async 表示内部有代码需要延迟执行
由于并没有开启新的线程,只是进行IO中断改变CPU调度,所以网络请求这样的异步操作可以使用async、await,但如果是执行大量耗时同步操作的话,应该使用isolate开辟新的线程去执行。
IOS发布链接:itms-services://?action=download-manifest&url=https://doctest.arcsoft.com.cn/app/IOS/Info.plist
遇到问题1:
chenyingyoudeMacBook-Pro:~ yingyou$ flutter packages get
Waiting for another flutter command to release the startup lock…
解决方法,如下:
1、关掉Android Studio打开flutter的安装目录/bin/cache/
2、删除lockfile文件
3、继续执行终端
遇到问题2:
Showing All Messages diff: /Podfile.lock: No such file or directory diff: /Manifest.lock: No such file or directory error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
解决方法:进入ios目录下 pod install
pod update --no-repo-update
遇到问题3:
在接入极光推送插件时,闪退,需要添加完整cup的.so库
ndk {
//选择要添加的对应 cpu 类型的 .so 库。
abiFilters'armeabi','armeabi-v7a','x86','x86_64','mips','mips64','arm64-v8a'
}
it.twsweb.Nextcloud
遇到问题4;
换flutter sdk时遇到问题
删除flutter/.pub-cache文件夹
然后运行flutter packages get就可以了
遇到问题5:
调试闪退,打包不闪退,或反过来
ndk { abiFilters"armeabi","armeabi-v7a","x86","mips"} } sourceSets { main { jniLibs.srcDirs = ['libs'] } }
Element
Element是Widget的实例
遇到问题1:
如何修改DropdownMenuItem高度
进入源码,修改_kMenuItemHeight
只传json:
response =await dio.post(
url,
data: data,
cancelToken: cancelToken,
);
传参数字:
response =await dio.post(
url,
queryParameters: data,
cancelToken: cancelToken,
);
时间截取
firstDate:newDateTime.now().subtract(newDuration(days:30)),// 减 30 天
lastDate:newDateTime.now().add(newDuration(days:30)),// 加 30
///时间格式化
import 'package:intl/intl.dart';
DateTime dateTimeNow = DateTime.now();
var format =new DateFormat("yyyy-MM-dd");
var dateTimeStart = format.format(dateTimeNow);
做打卡日历(要求固定6行,每行七天)思路是获取当月的List<DateTime>时利用时间截取,截取当月一号的周一开始的后面42天
Flutter控件:(方法互调)
final VoidCallback onLongPress;
void _onLongPress() {
widget.onLongPress();
}
在控件中调用_onLongPress,可以调用到传入的onLongPress方法回调
从之后页面返回后刷新当前页面指定数据
生成.g.data文件
flutter packages pub run build_runner build
flutter packages pub run build_runner build --delete-conflicting-outputs
flutter packages pub run build_runner watch
替换符号
applyDescription.replaceAll("\r\t", "\n")
ListView自适应
shrinkWrap:true,
physics:const NeverScrollableScrollPhysics(),
Text : overflow: TextOverflow.ellipsis
TabView不可滑动:
physics:new NeverScrollableScrollPhysics(),
横竖屏:
OrientationPlugin.forceOrientation(DeviceOrientation.portraitUp);
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
IOS播放视频需要权限
收起键盘
FocusScope.of(context).requestFocus(new FocusNode());
ios开发,build.gradle中可能要换成"../build";"/build"
DropdownButton的List第一项与value值必须一样
弹出框
showDialog(
// 第一个 context 是参数名,第二个 context 是 State 的成员变量
context:context,
builder: (_) {
return AlertDialog(
// dialog 的内容
content:Text("确定要提交请假申请吗?"),
// actions 设置 dialog 的按钮
actions: [
RaisedButton(
disabledColor: Colors.blue,
child:Text(
'确定',
style:TextStyle(color: Colors.white),
),
// 用户点击按钮后,关闭弹框
onPressed: () {
ApplyHoliday();
Navigator.pop(context);
}),
RaisedButton(
color: Colors.grey,
child:Text(
'取消',
style:TextStyle(color: Colors.white),
),
// 用户点击按钮后,关闭弹框
onPressed: () {
Navigator.pop(context);
}),
],
);
},
);
网友评论