Flutter:启动动画Lottie

实现启动动画方案:

js 复制代码
# 动画
lottie: ^3.1.3
# 启动动画
animated_splash_screen: ^1.3.0


dependency_overrides:

# 启动图适配 android 11 及以下, 12 以上,IOS
# 生成:dart run flutter_native_splash:create
# 删除:dart run flutter_native_splash:remove
flutter_native_splash:
  web: false
  # color_android: "#ffffff"
  background_image_android: "assets/icons/background.png"
  background_image_ios: "assets/icons/background.png"
  # image_ios: "assets/icons/android.png"
  android_12:
    image: "assets/icons/android12.png"
    # icon_background_color: "#324ea1"

1、第一祯

flutter_native_splash默认生成一张静态图,app首次启动时第一祯显示的画面,这个时常根据手机性能的不同,可能需要1-3秒左右。

2、flutter加载完毕后,进入自己写的欢迎页,这里用lottie+animated_splash_screen实现动画

js 复制代码
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:lottie/lottie.dart';

import 'index.dart';

class StartPage extends GetView<StartController> {
  const StartPage({super.key});

  // 主视图
  Widget _buildView() {
    return Container(
      color: const Color.fromARGB(255, 188, 84, 84),
      child: Center(
        child: SizedBox(
          width: 300,
          height: 300,
          child: LottieBuilder.asset(
            'assets/json/dancing.json',
            fit: BoxFit.contain,
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return GetBuilder<StartController>(
      init: StartController(),
      id: "start",
      builder: (_) {
        return Scaffold(
          backgroundColor: const Color.fromARGB(255, 188, 84, 84),
          body: _buildView(),
        );
      },
    );
  }
}
js 复制代码
import 'package:lingoaix/common/index.dart';
import 'package:get/get.dart';

class StartController extends GetxController {
  StartController();

  _jumpToPage() {
    // 延迟1秒
    Future.delayed(const Duration(seconds: 1)).then((_) {
      // 是否首次打开app
      if (!ConfigService.to.isAlreadyOpen) {
        // 第一次打开app,标记已打开
        ConfigService().setAlreadyOpen();
      }
      var token = Storage().getString('token');
      if (token.isNotEmpty) {
        Get.offAllNamed('/');
      } else {
        Get.offAllNamed('/loginPage');
      }

      
      
    });
  }




  @override
  void onReady() {
    super.onReady();
    _initData();
  }

}

Lottie官网

将保存的json文件 放到assets/json目录下,即可实现启动动画页面。

相关推荐
柿蒂15 小时前
聊聊SliverPersistentHeader优先消费滑动的设计
android·flutter
fishofeyes20 小时前
Riverpod使用
flutter
消失的旧时光-19431 天前
iFlutter --> Flutter 开发者 的 IntelliJ IDEA / Android Studio 插件
flutter·android studio·intellij-idea
马拉萨的春天2 天前
block的样式有哪些?如果copy的话分别会有啥样式
flutter·性能优化·ios的block
Rattenking2 天前
【CSS】---- 图形函数详解
笔记·学习·flutter
程序员老刘2 天前
别再抱怨Flutter方案太多了,这个就叫生态!
flutter·客户端
黄毛火烧雪下2 天前
(一)Flutter 插件项目demo预览图
flutter
站在远方望童年2 天前
WSL2 中的 Flutter 开发环境配置
flutter
w_y_fan2 天前
flutter_native_splash: ^2.4.7
android·前端·flutter