IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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页面个别细节需要微调整
?? ?2: 再IOS平台上底部弹窗需要使用SafeArea包裹,避免出现弹窗底部按钮和导航栏遮挡
?? ?3:优先考虑使用update['id']这种方式局部刷新页面
?? ?4:主题的更换,使用一个类来实现,主要涉及颜色、图片等资源,避免到处传参
?? ?5:发挥flutter跨平台的最大特性,个别特殊功能使用PlatformView或者Channel和原生交互实现
?? ?6:
?? ?
?flutter异常捕获(最终还是通过原生上报)

? ? ? ? ?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中,一切都是对象,所有的对象都是继承自Object

Dart是强类型语言,但可以用var或 dynamic来声明一个变量,Dart会自动推断其数据类型,dynamic类似c#

没有赋初值的变量都会有默认值null

Dart支持顶层方法,如main方法,可以在方法内部创建方法

Dart支持顶层变量,也支持类变量或对象变量

Dart没有public protected private等关键字,如果某个变量以下划线(_)开头,代表这个变量在库中是私有的


介绍flutter
1:路由管理Navigator、Get

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
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:55:38  更:2022-08-06 10:58:51 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码