Как перемещаться по главной странице после того, как анимация Lottie завершилась с дрожью, когда я запускаю код, он многократно показывает анимацию Lottie.

-1
Loganathan K 18 Мар 2021 в 09:15

2 ответа

Лучший ответ

Вы можете скопировать и вставить полный код ниже
Вы можете использовать AnimationController и в Lottie onLoaded вызвать AnimationController forward().whenComplete, тогда вы можете сделать Navigator.push
фрагмент кода

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
рабочая демонстрация

enter image description here

Полный код

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")));
  }
}
0
chunhunghan 18 Мар 2021 в 06:51

Покажите код для вызова анимации и перехода, тогда можете что-нибудь подсказать.

0
greengo 18 Мар 2021 в 06:45