Flutter 启动页适配

参考文章Flutter 开发 Android & IOS 启动页 splash pagFlutter 启动页(闪屏页)具体实现和原理分析Flutter启动流程和原理分析需要知道的iOS13 开始 苹果要放弃LaunchImage适配启动图 , 改为必须走LaunchScreen.sb来启动所以在iOS端,启动图适配,要么使用LaunchScreen.sb 内嵌UIImageView +AutoLayout 来适配(依旧使用整图), 要么就采用 页面布局的方式, 来开发启动页,具体可以
摘要由CSDN通过智能技术生成

参考文章

Flutter 开发 Android & IOS 启动页 splash pag
Flutter 启动页(闪屏页)具体实现和原理分析
Flutter启动流程和原理分析

需要知道的

  1. iOS13 开始 苹果要放弃LaunchImage适配启动图 , 改为必须走LaunchScreen.sb来启动
    所以在iOS端,启动图适配,要么使用LaunchScreen.sb 内嵌UIImageView +AutoLayout 来适配(依旧使用整图), 要么就采用 页面布局的方式, 来开发启动页,具体可以参考下面这个链接
    iOS 13使用LaunchScreen.storyboard适配各尺寸启动图

  2. Flutter 的启动顺序,或者说是启动过程
    iOS和Android端的原理其实是一样的, Android的MainActivity继承了FlutterActivity,FlutterActivity又通过FlutterActivityDelegate实现了生命周期的代理, 就是创建一个View并通过MainActivity的onCreate方法去加载显示出来,
    同样的, iOS端也在AppDelegate中处理, AppDelegate: FlutterAppDelegate

所以总结来说, Flutter 的启动顺序依然和RN 一样, 先是各自从原生的Launch启动, 这一部分是iOS/Android原生处理,属于冷启动过程(机器不行就会等待较长时间), 还没有涉及到Flutter部分, 如果不做处理,将会有白屏或者黑屏短暂出现,
直到到Flutter层页面被加载出来, 此时启动就算结束了

  1. Flutter 接管后, 是否需要一个Flutter层面的启动页?
    一般来说,Flutter确实需要这么一个Flutter层面的启动页,
    从刚才的原生层启动后, 按道理就是进入Flutter页面了,内容也都呈现了 为什么说通常意义还需要一个Flutter层面的启动页呢?
    这是因为,一般我们需要在Flutter层面做一些同步耗时的操作, 比如两步认证/token验证/App状态检测等等, 有一个启动页帮助我们缓冲一下,相对比较合适…

举个例子(不算恰当), App登录已超时,如果App启动后直接进入首页, 然后由于某些原因必须退出到登录页, 这样的交互显的不那么完美, 最好的是在启动前,就能从接口处得知登录状态, 若登录失效,就直接进入登录页面,未失效就直接进入首页进行业务处理,
所以,请求的过程放到Flutter的启动页, 会显得比较合适

  1. 由于iOS的冷启动采用页面布局的方式实现(放弃LaunchImage的图片适配方式), 建议Flutter层面的启动页面, 也通过页面布局方式(偷懒就丢一整张图)
    这样适配起来可控, 能做到肉眼不可查, 放图片的话,又是要进行图片的适配,反而麻烦

开始吧

1.首先因为启动图比较简单, 我这边就找UI给了2x/3x 的两个图, 分别在iOS原生层和Flutter层添加这两张图片作
在这里插入图片描述

iOS原生启动

图片

(截图有点早, 其实这边包括后面Flutter , 都是讲图片居于底部居中的布局方式,此处就不另行截图了)
在这里插入图片描述
在这里插入图片描述

iOS端冷启动页面比较简单,就在LaunchScreen.sb中放一个UIImageView, 做好约束就可以了,我这边因为启动页比较简单, 就让UI切一张图即可,背景色到时候改成白色基本就看不出来了,
图片的填充模式记得选择 Aspect Fill 填充

iOS 原生启动层效果


Android 原生启动

一个插曲…
刚开始使用AS创建Flutter项目的时候, 它默认创建的android/iOS ,分别是Kotlin和swift 模式, 鉴于对kotlin的不熟悉, 需要换成java的版本, 所以可以删除掉项目文件夹下的 android 文件,然后再终端重新创建一下
查看一下Flutter 的命令行工具
ruby flutter create -h
在这里插入图片描述
可以看到, 创建的默认就是 swift/ kotlin , 需要切换的就可以切换一下

修改Android ruby create -a java .
修改iOS ruby create -i objc

切换过后,
创建好的文件就便是纯java的了, 当然一些文件和配置, 就需要重新设置了…

在这里插入图片描述

安卓部分

在这里插入图片描述
如上图部分, FLutter 会在 AndroidManifest.xml中指定好Launch启动页入口

            <!-- Displays an Android View that continues showing the launch screen
                 Drawable until Flutter paints its first frame, then this splash
                 screen fades out. A
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的AS程序实现上一和下一图片轮播切换显示的示例代码: ```java import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ImageView; public class MainActivity extends AppCompatActivity { private int[] imageIds = {R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4}; private int currentIndex = 0; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imageView); imageView.setImageResource(imageIds[currentIndex]); } public void previousImage(View view) { if (currentIndex == 0) { currentIndex = imageIds.length - 1; } else { currentIndex--; } imageView.setImageResource(imageIds[currentIndex]); } public void nextImage(View view) { if (currentIndex == imageIds.length - 1) { currentIndex = 0; } else { currentIndex++; } imageView.setImageResource(imageIds[currentIndex]); } } ``` 在这个程序中,我们定义了一个数组来存储所有需要显示的图片资源ID,以及一个变量来记录当前显示的图片的索引。在程序启动时,我们将当前索引对应的图片显示在ImageView中。 当用户点击"上一"按钮时,我们将当前索引减1,并显示对应的图片。如果当前已经是第一张图片,则显示最后一张图片。 当用户点击"下一"按钮时,我们将当前索引加1,并显示对应的图片。如果当前已经是最后一张图片,则显示第一张图片。 我们可以在布局文件中添加两个按钮来触发上一和下一的操作: ```xml <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal"> <Button android:id="@+id/previousButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上一" android:onClick="previousImage"/> <Button android:id="@+id/nextButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一" android:onClick="nextImage"/> </LinearLayout> ``` 注意到我们为这两个按钮设置了onClick属性,分别对应调用MainActivity中的previousImage和nextImage方法。这样,当用户点击按钮时,程序就会调用对应的方法来切换显示图片。 这个程序只是一个简单的例子,实际上图片轮播切换显示还有很多细节需要考虑,例如图片加载和缓存、图片切换的动画效果等等。但是这个例子可以帮助我们理解如何通过代码来实现图片轮播的基本功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值