Flutter系列之项目篇:入口代码解析

目录导航

    • Dart入口代码
    • Dart程序与Android入口activity衔接
    • 关注公众号,随时接收优质技术文章

Dart入口代码

用Dart语言编写的跨平台代码置于Flutter项目的lib目录下。
Flutter系列之项目篇:入口代码解析_第1张图片
在java中,程序的执行入口是main方法,该main方法为某个类的静态方法(static method)。
类似于java,dart程序的执行入口是名为main的函数。该main函数为顶级函数(top-level function),不属于任何类(static function)或对象(instance function),可独立调用,不必通过类或对象。

例如,在main.dart文件中定义一个main函数:

void main() => runApp(RootWidget());

“=>”语法为dart的一个语言特性,当方法体只有一句代码时,可省略花括号,用“=>”代替。上面的代码等价于:

void main(){
  runApp(RootWidget());
}

在flutter中,widget为构建UI界面的元素,同时,一个界面就是一个widget(作为根widget,可添加child widget,形成一个复杂的widget tree)。

runApp是启动flutter界面的方法,接收一个widget参数,作为第一个flutter界面。

Dart程序与Android入口activity衔接

入口activity需继承FlutterActivity,并通过GeneratedPluginRegistrant类的registerWith方法,将入口activity与dart程序衔接。GeneratedPluginRegistrant类由flutter插件自动生成。

class MainActivity: FlutterActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    GeneratedPluginRegistrant.registerWith(this)
  }
}

配置AndroidManifest.xml文件,

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="zzq.coder.com.flutter_app">
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="flutter_app"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">

            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            intent-filter>
        activity>
    application>
manifest>

application的实现类必须为io.flutter.app.FlutterApplication或其子类。
入口activity中配置了一个meta-data,

<meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />

启动app到flutter UI渲染出第一帧需要消耗一定的时间,上面的配置表示,将该activity作为欢迎页展示,直到flutter渲染出第一帧。

为入口activity配置主题风格,指定欢迎页窗口背景,


<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        
        "android:windowBackground">@drawable/launch_background
    style>
resources>

关注公众号,随时接收优质技术文章

在这里插入图片描述

你可能感兴趣的:(跨平台,dart,flutter)