从Android 开发到Flutter 之 开屏页和广告页《二》

在APP开发的过程中,我们一般需要一个开屏页和一个广告页

开屏页

开发Android 的都知道,Android启动的时候会有一个小的空白,我们的解决方法是给开屏页设置style ,让其在加载声明周期方法之前先设置一个填位图,消除空白


  • Flutter 项目在IOS上是秒起的,不会出现这个问题,在Android上还是会出现的,但是Flutter 项目已经将这个操作在创建项目的时候就实现了

  • 打开android moudle 找到res->style 看一下启动页的主题 drawable 所指向的文件 launch_background 文件,就是更具Android中常用的解决方法处理的,

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


<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/splash" /> <--此处为更换的图片-->

    
   
        
            
            
            
            
            
    
layer-list>

这就解决了开屏的问题,但是一般会在开屏的时候初始化一些东西 这样的话我们怎么处理,此时我们可以使用开屏之后开启广告页 既展示广告又能初始化一些东西

需求:APP启动的时候需要判断是否已经登录,跳转相对应的page

在设置完成开屏之后会发现启动直接就到main.dart了,没办法做这个处理,并且Dart 是单线程的语言,关于数据的存储都需要异步来实现,

解决办法

添加广告页,既作为展示广告页初始化一些操作

class SplashPage extends StatefulWidget {
  @override
  _SplashPageState createState() => _SplashPageState();
}

class _SplashPageState extends State<SplashPage> {
  String route;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    getCredential();
  }

  getCredential() {
    SPUtil.init().get(TMCommonConstant.AUTH_TOKEN).then((result) {
      route = result;
      //异步获取到数据之后判断token 是否为空
      if (route == null) {
        route = "/";
      } else {
        route = "navigation";
      }
      countDown();
    });
  }

  @override
  Widget build(BuildContext context) {
  	//展示广告
    return new Image.asset(
      Images.splash,
      fit: BoxFit.fill,
    );
  }

  void countDown() {
  //倒计时3s
    var _duration = new Duration(seconds: 3);
    Future.delayed(_duration, goHome);
  }

  void goHome() {
  //根据判断的路由跳转到相应的页面
    Navigator.pushReplacementNamed(context, route);
  }
}

你可能感兴趣的:(Flutter)