Flutter核心技术与实战
陈航
美团点评高级技术专家
立即订阅
6150 人已学习
课程目录
已完结 47 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 为什么每一位大前端从业者都应该学习Flutter?
免费
01 | 预习篇 · 从0开始搭建Flutter工程环境
02 | 预习篇 · Dart语言概览
Flutter开发起步 (3讲)
03 | 深入理解跨平台方案的历史发展逻辑
04 | Flutter区别于其他方案的关键技术是什么?
05 | 从标准模板入手,体会Flutter代码是如何运行在原生系统上的
Dart语言基础 (3讲)
06 | 基础语法与类型变量:Dart是如何表示信息的?
07 | 函数、类与运算符:Dart是如何处理信息的?
08 | 综合案例:掌握Dart核心特性
Flutter基础 (13讲)
09 | Widget,构建Flutter界面的基石
10 | Widget中的State到底是什么?
11 | 提到生命周期,我们是在说什么?
12 | 经典控件(一):文本、图片和按钮在Flutter中怎么用?
13 | 经典控件(二):UITableView/ListView在Flutter中是什么?
14 | 经典布局:如何定义子控件在父容器中排版的位置?
15 | 组合与自绘,我该选用何种方式自定义Widget?
16 | 从夜间模式说起,如何定制不同风格的App主题?
17 | 依赖管理(一):图片、配置和字体在Flutter中怎么用?
18 | 依赖管理(二):第三方组件库在Flutter中要如何管理?
19 | 用户交互事件该如何响应?
20 | 关于跨组件传递数据,你只需要记住这三招
21 | 路由与导航,Flutter是这样实现页面切换的
Flutter进阶 (17讲)
22 | 如何构造炫酷的动画效果?
23 | 单线程模型怎么保证UI运行流畅?
24 | HTTP网络编程与JSON解析
25 | 本地存储与数据库的使用和优化
26 | 如何在Dart层兼容Android/iOS平台特定实现?(一)
27 | 如何在Dart层兼容Android/iOS平台特定实现?(二)
28 | 如何在原生应用中混编Flutter工程?
29 | 混合开发,该用何种方案管理导航栈?
30 | 为什么需要做状态管理,怎么做?
31 | 如何实现原生推送能力?
32 | 适配国际化,除了多语言我们还需要注意什么?
33 | 如何适配不同分辨率的手机屏幕?
34 | 如何理解Flutter的编译模式?
35 | Hot Reload是怎么做到的?
36 | 如何通过工具链优化开发调试效率?
37 | 如何检测并优化Flutter App的整体性能表现?
38 | 如何通过自动化测试提高交付质量?
Flutter综合应用 (6讲)
39 | 线上出现问题,该如何做好异常捕获与信息采集?
40 | 衡量Flutter App线上质量,我们需要关注这三个指标
41 | 组件化和平台化,该如何组织合理稳定的Flutter工程结构?
42 | 如何构建高效的Flutter App打包发布环境?
43 | 如何构建自己的Flutter混合开发框架(一)?
44 | 如何构建自己的Flutter混合开发框架(二)?
结束语 (1讲)
结束语 | 勿畏难,勿轻略
特别放送 (1讲)
特别放送 | 温故而知新,与你说说专栏的那些思考题
Flutter核心技术与实战
登录|注册

39 | 线上出现问题,该如何做好异常捕获与信息采集?

陈航 2019-09-26
你好,我是陈航。
在上一篇文章中,我与你分享了如何为一个 Flutter 工程编写自动化测试用例。设计一个测试用例的基本步骤可以分为 3 步,即定义、执行和验证,而 Flutter 提供的单元测试和 UI 测试框架则可以帮助我们简化这些步骤。
其中,通过单元测试,我们可以很方便地验证单个函数、方法或类的行为,还可以利用 mockito 定制外部依赖返回任意数据,从而让测试更可控;而 UI 测试则提供了与 Widget 交互的能力,我们可以模仿用户行为,对应用进行相应的交互操作,确认其功能是否符合预期。
通过自动化测试,我们可以把重复的人工操作变成自动化的验证步骤,从而在开发阶段更及时地发现问题。但终端设备的碎片化,使得我们终究无法在应用开发期就完全模拟出真实用户的运行环境。所以,无论我们的应用写得多么完美、测试得多么全面,总是无法完全避免线上的异常问题。
这些异常,可能是因为不充分的机型适配、用户糟糕的网络状况;也可能是因为 Flutter 框架自身的 Bug,甚至是操作系统底层的问题。这些异常一旦发生,Flutter 应用会无法响应用户的交互事件,轻则报错,重则功能无法使用甚至闪退,这对用户来说都相当不友好,是开发者最不愿意看到的。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Flutter核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(5)

  • 回眸~
    public class MainActivityFlutterTest extends AppCompatActivity {
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            View flutterView = Flutter.createView(MainActivityFlutterTest.this, getLifecycle(), "route1");
            setContentView(flutterView);
        }
    }老师,请问下如果用这种方式在原生中添加flutterview ,那么可以在这个原生actiivty中设置mehodChannel 吗 ,貌似MethodChannel 需要BinaryMessenger,这个怎么设置呀

    作者回复: 你可以参考30篇分享的示例代码:https://github.com/cyndibaby905/27_native_view

    2019-11-07
    1
  • 浣熊特工队
    老师,我参考您github上的代码后,在json转换出现 type 'int' is not a subtype of type 'double' 这个类型的异常时,发现FlutterError.onError回调和runZoned的onError都不执行啊,到是进了自定义的错误界面

    作者回复: 检查一下其他的异常是否可以捕获

    2019-10-30
  • Carlo
    老师,我使用了Firebase Crashlytics。(通过官方插件firebase_crashlytics)但是得倒的crash stack trace根本没有用啊。(只能知道是点击ink_well 造成了crash,但是没告诉是哪个file,哪行代码)

    Crashlytics.crash (firebase_crashlytics.dart:50)
    _InkResponseState._handleTap (ink_well.dart:635)
    _InkResponseState.build.<fn> (ink_well.dart:711)
    GestureRecognizer.invokeCallback (recognizer.dart:182)
    TapGestureRecognizer._checkUp (tap.dart:365)
    TapGestureRecognizer.handlePrimaryPointer (tap.dart:275)
    PrimaryPointerGestureRecognizer.handleEvent (recognizer.dart:455)
    PointerRouter._dispatch (pointer_router.dart:75)
    PointerRouter.route (pointer_router.dart:102)
    _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (binding.dart:218)
    _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (binding.dart:198)

    作者回复: 1.看起来是手势处理出现了冲突,可以重点检查这部分的代码
    2.你这个异常堆栈是Dart的,Dart的异常是不会Crash的

    2019-10-04
  • 亡命之徒
    老师 ,想问下 flutter 开发web页面可以怎么做嘛

    作者回复: 参考这篇文章:https://mp.weixin.qq.com/s/krR2XsDXvakMlZWbV-VvSg

    2019-09-27
  • wtsky 。
    老师,checkbox等类型控件,必须和statefulwidget setState方法配合使用吗

    作者回复: 对,这个widget本身没有状态,需要调用方自己维护

    2019-09-26
收起评论
5
返回
顶部