作者回复: 首先明确,我们学习一门编程语言并不是为了成为语言专家,而是为了解决实际问题。我认为通过1-2天的学习,在了解一门语言是如何表达信息和处理信息之后,语言的基本套路就搞懂了,然后可以根据实际问题上手去实践,找相应成熟的框架和库,边做边学,加深理解。
作者回复: 通常是dp
作者回复: 试试IntrinsicHeight,这个组件会根据实际情况把子widget的高度调整它本身实际的高度。
IntrinsicHeight(
child: Row(children: [
Container(width: 100,color: Colors.yellow),
Expanded(flex:1,child: Container(height:300, color: Colors.amber)),
]),
)
);
作者回复: 这种情况一般是布局约束写的有问题,建议多试试几种不同的分辨率,也关注下运行时异常
作者回复: 首先明确,我们学习一门编程语言并不是为了成为语言专家,而是为了解决实际问题。语言的知识体系也有所谓的28原则,我认为通过1-2天的学习,在了解一门语言是如何表达信息和处理信息之后,语言的基本套路就搞懂了,然后可以根据实际问题上手去实践。Dart的精髓在于其简洁而强大的语法特性,在解决问题时顺便去读一些Flutter的源码,了解Dart是如何从语言特性上支持这些功能 边做边学,加深理解就可以了。
所以我不太建议在已经有其他编程语言基础的情况下再去系统的学习Dart,如果对Dart确实很感兴趣,可以参考官方的教程:https://dart.dev/guides/language
作者回复: 会介绍一些,但不会专门讲。状态管理那节会主要讲Provider
作者回复: 会的
作者回复: 加油
作者回复: 懂的基本的前端概念(视图、组件、状态、生命周期、路由)就可以上手了
作者回复: 网络调用的执行是由操作系统提供的另外的底层线程做的,和Dart就没关系了。event queue里只会放一个网络调用的最终执行结果(成功或失败)及响应执行结果的处理回调。
作者回复: 我们的App大多数场景下都是静默状态,单线程对大多数场景已经足够用了:
1.I/O、网络请求操作系统提供了异步的API
2.CPU密集型的操作用Isolate即可
可以看下我之前在GMTC 2019的分享:Event Loop、Future与Isolate - 单线程模型下的Dart异步编程模式
作者回复: 我们需要建立起这么一个概念,单线程也是可以异步执行的:
1.App绝大多数时间都在等待(等待用户交互、等待网络请求返回、等待I/O结果)
2.等待行为并不是阻塞的,以I/O和网络访问为例,操作系统均提供了非阻塞型API,事件回调告知状态
如果对这一块内容不清楚的话,可以看下之前我在GMTC 2019上的分享:《Event Loop、Future与Isolate - 单线程模型下的Dart异步编程模式》
后续分享我也会专门介绍Dart的异步和并发。
作者回复: Flutter确实不支持动态化,而且目前看从官方层面短期内也不会支持的。理由是发布期AOT是Flutter代码执行效率高的保障,不可能改回JIT;另外苹果也不允许除了JSCore之外还有别的VM可以动态执行逻辑。
这个事情有三个解法:
1.Flutter可以内嵌webview支持原有的H5
2.Flutter提高了迭代效率节省了研发资源,对于一些需要快速上线的功能,用Flutter开发完再发一个新版本就行了
3.业界已经有团队使用JSCore实现动态布局了,预计下半年会有一些较为成熟的方案出现
作者回复: Flutter高性能的其中一个重要因素就是因为Dart在发布期是AOT,所以Google是不可能改成动态编译的,另外苹果也不允许除了JSCore之外的其他动态编译/解释执行环境。
不过如果你的诉求是希望能够实现动态界面,目前业界已经有在上层封装DSL实现Flutter动态布局的实践了,可以看看GMTC大会上美团和微信的分享
作者回复: Widget包括了视图、布局、交互、动画等概念,嵌套组装起来会比较方便,如果一开始使用不太适应,可以借助于IDE提供的Editor UI Guides插件辅助阅读/编写。
作者回复: 1.GC会在应用的空闲时间进行内存压缩,从而较少内存碎片来优化内存。
2.任何时候只用一半,如果一半要满了,活动的对象将会被复制到另一半空间中,一半就会全部清空。