1.主页面
flutter都是以dart语言编写的,除了之前插入启动页和闪屏页的时候涉及了Android 下的manifest编写,其他的都没怎么涉及,那加载的页面对应于Android是什么呢?
mCurrentUserId=0
Current looper: Looper (android.ui, tid=1671)
mCurrentUserId=0
mCurrentFocus=Window{9792f01 u0 com.example.flutterlayouttest/com.example.flutterlayouttest.MainActivity}
mCurrent=[0,96][1080,2340]
Current looper: Looper (android.ui, tid=1671)
mCurrentAppOrientation=SCREEN_ORIENTATION_UNSPECIFIED
mCurrentRotation=ROTATION_0
以之前的学习的demo为例,加载的其实是MainActivity
这其实和Android下的manifest是对应的,可以看到manifest下面声明了一个名为MainActivity的activity。
自动生成的MainActivity是用kotlin写的。。。要学的东西真多。。。
package com.example.flutterlayouttest
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}
看样子是继承了FlutterActivity并且重写了一个配置flutter engine的方法
flutter是开源的,点击看下MainActivity继承的FlutterActivity瞄一眼
这里应该就是中规中矩的Android代码了,继承了android.app.Activity并实现了一些方法
瞄一眼构造函数
protected void onCreate(@Nullable Bundle savedInstanceState) {
this.switchLaunchThemeForNormalTheme();
super.onCreate(savedInstanceState);
this.lifecycle.handleLifecycleEvent(Event.ON_CREATE);
this.delegate = new FlutterActivityAndFragmentDelegate(this);
this.delegate.onAttach(this);
this.delegate.onActivityCreated(savedInstanceState);
this.configureWindowForTransparency();
this.setContentView(this.createFlutterView());
this.configureStatusBarForFullscreenFlutterExperience();
}
初始化了主题、使用了lifecycle、设置了代理、透明度、设置了布局以及为全屏配置了statusBar
具体细节后面再慢慢撸代码。。。
2.架构图
学习https://flutter.cn/docs/resources/faq#what-kinds-of-apps-can-i-build-with-flutter
中有个章节是
Flutter 是使用什么技术构建的?
Flutter 使用 C、C++、Dart 和 Skia (2D 渲染引擎) 构建。您可以参阅下面这张 架构图。
下载了架构图如下
这里表示flutter有两层,由dart写的framework层和C++写的engine,刚看的源码中有涉及engine
这里写了graphics流程
渲染流程,有点类似于measure layout draw...
StatelessWidget是无状态的UI,是不可变的,只能根据不同的BuildContexts构造一个个UI
而StatefulWidget是有状态的UI,有一个state的类对应于不同的BuildContext
写了下StatefulWidget状态改变触发的流程
3.后续学习方向
学习下https://flutter.cn/docs/resources/faq#what-kinds-of-apps-can-i-build-with-flutter 的技术篇
简单学习下FlutterActivity的源码
简单了解下kotlin