| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Flutter经验整理 -> 正文阅读 |
|
[移动开发]Flutter经验整理 |
flutter经验总结,稍候会整理进简历 ?? ?1:使用flutter_screenutil做跨平台适配时,ios页面个别细节需要微调整 ? ? ? ? ?1:原生接入友盟统计?2:在flutter和原生进行channle交互配置 3:在flutter中通过FlutterError.onError,提供?个?定义的错误处理回调 4:最终还是通过原生上报 MobclickAgent.reportError//全局异常的捕捉 class AppCatchError { run(Widget app) { ///Flutter 框架异常 FlutterError.onError = (FlutterErrorDetails details) async { ///线上环境 if (BaseUrl.DEBUG == false) { Zone.current.handleUncaughtError(details.exception, details.stack!); } else { //开发期间 print FlutterError.dumpErrorToConsole(details); } }; runZonedGuarded(() { //受保护的代码块 runApp(app); }, (error, stack) => catchError(error, stack)); } ///对搜集的 异常进行处理 上报等等 catchError(Object error, StackTrace stack) { // print("AppCatchError>>>>>>>>>>: $kReleaseMode"); //是否是 Release版本 // print('AppCatchError message:$error,stack$stack'); if (BaseUrl.DEBUG == true) { // if (kDebugMode) { // ignore: avoid_print print( '\n\n\n\n??????????全局异常捕获??????\n👇👇👇\n\nerror:$error\n:$stack\n👆👆👆\n??????????????????\n\n'); // } } CrashTool.crashGlobalWithType( content: stack.toString(), error: error.toString()); } } ?? ? 介绍Dart语言特性 Dart是强类型语言,但可以用var或 dynamic来声明一个变量,Dart会自动推断其数据类型,dynamic类似c# 没有赋初值的变量都会有默认值null Dart支持顶层方法,如main方法,可以在方法内部创建方法 Dart支持顶层变量,也支持类变量或对象变量 Dart没有public protected private等关键字,如果某个变量以下划线(_)开头,代表这个变量在库中是私有的
Dart线程模型及异常捕获
在
Java
和
OC
中,如果程序发?异常且没有被捕获,那么程序将会终?,但在
Dart
或
JavaScript
中则不会,究其原因,这 和它们的运?机制有关系,Java
和
OC
都是多线程模型的编程语?,任意?个线程触发异常且没被捕获时,整个进程就 退出了。但Dart
和
JavaScript
不同,它们都是单线程模型,运?机制很相似
(
但有区别
)Dart 在单线程中是以消息循环机制来运?的,其中包含两个任务队列,?个是“微任务队列” microtask queue,另?个 叫做“事件队列” event queue。微任务队列的执?优先级?于事件队列。函数 main() 执?完后,消息循环机制便启动了。?先会
按照先进先出的顺序逐个执?微任务队列中的任务,当所有微任务队列执?完后便开始执?事件队列中的任务,事件任 务执?完毕后再去执?微任务,如此循环往复,??不息。
在
Dart
中,所有的外部事件任务都在事件队列中,如
IO
、计时器、点击、以及绘制事件等,?微任务通常来源于
Dart
内 部,并且微任务?常少,之所以如此,是因为微任务队列优先级?,如果微任务太多,执?时间总和就越久,事件队列 任务的延迟也就越久,对于GUI应?来说最直观的表现就是?较卡,所以必须得保证微任务队列不会太?。值得注意的 是,我们可以通过 Future.microtask(…)
?法向微任务队列插??个任务。 在事件循环中,当某个任务发?异常并没有被捕获时,程序并不会退出,?直接导致的结果是当前任务的后续代码就不 会被执?了,也就是说?个任务中的异常是不会影响其它任务执?的
Pointer事件处理
? ? ??
当指针按下时,
Flutter
会对应?程序执?命中测试
(Hit Test)
,以确定指针与屏幕接触的位置存在哪些
widget
, 指针按下
事件(以及该指针的后续事件)然后被分发到由命中测试发现的最内部的
widget
,然后从那?开始,事件会在
widget
树
中向上冒泡,这些事件会从最内部的
widget
被分发到到
widget
根的路径上的所有
Widget
,这和
Web
开发中浏览器的事件
冒泡机制相似, 但是
Flutter
中没有机制取消或停?冒泡过程,?浏览器的冒泡是可以停?的。注意,只有通过命中测试
的
Widget
才能触发事件。
?定义Widget?法简介
? ? ? ?
在
Flutter
中?定义
Widget
有三种?式:通过组合其它
Widget、通过CustomPaint
和
Canvas
?绘、
实现RenderObject。
? ? ? ?
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 4:29:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |