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

9 篇文章 0 订阅
9 篇文章 1 订阅

Dart入口代码

用Dart语言编写的跨平台代码置于Flutter项目的lib目录下。
在这里插入图片描述
在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配置主题风格,指定欢迎页窗口背景,

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <!-- Show a splash screen on the activity. Automatically removed when
             Flutter draws its first frame -->
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
</resources>

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vincent(朱志强)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值