【问题标题】:How to navigate to main page after lottie splash.json completed in flutter?lottie splash.json 在颤振中完成后如何导航到主页?
【发布时间】:2021-06-15 12:49:26
【问题描述】:

当我运行重复显示 Lottie 动画的代码时,如何在 Lottie 动画完成后导航主页。

【问题讨论】:

    标签: flutter flutter-layout flutter-dependencies flutter-animation


    【解决方案1】:

    您可以在下面复制粘贴运行完整代码
    你可以使用AnimationControllerLottie onLoaded 调用AnimationController forward().whenComplete 然后你可以做Navigator.push
    代码sn-p

    class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
      AnimationController _controller;
    
      @override
      void initState() {
        super.initState();
    
        _controller = AnimationController(vsync: this);
      }
    ...  
    Lottie.asset(
                'assets/LottieLogo1.json',
                controller: _controller,
                onLoaded: (composition) {
                  _controller
                    ..duration = composition.duration
                    ..forward().whenComplete(() => Navigator.push(
                          context,
                          MaterialPageRoute(builder: (context) => SecondPage()),
                        ));
                },
              ),
    

    要运行工作演示,您需要此文件https://github.com/xvrh/lottie-flutter/blob/master/example/assets/LottieLogo1.json
    工作演示

    完整代码

    import 'package:flutter/material.dart';
    import 'package:lottie/lottie.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
      AnimationController _controller;
    
      @override
      void initState() {
        super.initState();
    
        _controller = AnimationController(vsync: this);
      }
    
      @override
      void dispose() {
        _controller.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: ListView(
            children: [
              Lottie.asset(
                'assets/LottieLogo1.json',
                controller: _controller,
                onLoaded: (composition) {
                  _controller
                    ..duration = composition.duration
                    ..forward().whenComplete(() => Navigator.push(
                          context,
                          MaterialPageRoute(builder: (context) => SecondPage()),
                        ));
                },
              ),
            ],
          ),
        );
      }
    }
    
    class SecondPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(body: Center(child: Text("Second Page")));
      }
    }
    

    【讨论】:

      【解决方案2】:

      显示调用动画和过渡的代码,然后你可以提出一些建议。

      【讨论】:

        猜你喜欢
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        • 2020-09-25
        • 2020-09-20
        • 2016-02-14
        • 1970-01-01
        • 2019-12-09
        相关资源
        最近更新 更多