0

由于 Flutter 中的安全性,我在代码中有一个错误,我试图通过使用LATE声明变量来解决它。<br /

但是当我尝试构建它时,它出现了另一个:

错误

这是我的代码:

class AnimacionesPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: CuadradoAnimado(),
      ),
    );
  }
}

class CuadradoAnimado extends StatefulWidget {
  @override
  _CuadradoAnimadoState createState() => _CuadradoAnimadoState();
}

class _CuadradoAnimadoState extends State<CuadradoAnimado>
    with SingleTickerProviderStateMixin {
  late AnimationController controller;
  late Animation<double> rotacion;

@override
  void initState() {
    controller = new AnimationController(
        vsync: this, duration: Duration(milliseconds: 4000));

    rotacion = Tween(begin: 0.0, end: 2 * Math.pi)
        .animate(CurvedAnimation(parent: controller, curve: Curves.easeOut));

 @override
  Widget build(BuildContext context) {
    // Play / Reproducción
    controller.forward();

    return AnimatedBuilder(
      animation: controller,
      child: _Rectangulo(),
4

2 回答 2

0

尝试这个

     class _CuadradoAnimadoState extends State<CuadradoAnimado>
                with SingleTickerProviderStateMixin {
              AnimationController? controller;
              Animation<double>? rotacion;
            
            @override
              void initState() {
                controller = new AnimationController(
                    vsync: this, duration: Duration(milliseconds: 4000));
            
                rotacion = Tween(begin: 0.0, end: 2 * Math.pi)
                    .animate(CurvedAnimation(parent: controller, curve: Curves.easeOut));
             controller.forward();
setState((){});
    }
             @override
              Widget build(BuildContext context) {
                // Play / Reproducción
               
            
                return controller==null && rotacion==null ? CircularProgressIndicator.adaptive():  AnimatedBuilder(
                  animation: controller!,
                  child: _Rectangulo());
于 2022-02-10T11:22:00.873 回答
0

嘿 Ignacio,欢迎来到 StackOverFlow 社区

它应该运作良好,但尝试纠正一些事情。

首先,这是一段代码,它将解释您想要做什么:

import 'package:flutter/material.dart';

const Color darkBlue = Color.fromARGB(255, 18, 32, 47);

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(
        scaffoldBackgroundColor: darkBlue,
      ),
      debugShowCheckedModeBanner: false,
      home: const Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatefulWidget {
  const MyWidget({Key? key}) : super(key: key);

  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget>
    with SingleTickerProviderStateMixin {
  late AnimationController controller;
  late Animation<double> rotacion;

  @override
  void initState() {
    super.initState();
    controller = AnimationController(
        vsync: this, duration: const Duration(milliseconds: 4000));

    rotacion = Tween<double>(begin: 0.0, end: 250)
        .animate(CurvedAnimation(parent: controller, curve: Curves.easeOut));
    controller.forward();
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: AnimatedBuilder(
          animation: rotacion,
          builder: (context, _) {
            return Container(
              margin: const EdgeInsets.symmetric(vertical: 10),
              height: rotacion.value,
              width: rotacion.value,
              child: const FlutterLogo(),
            );
          }),
    );
  }
}

第一件事(您可能忘记添加它,但这只是一个提醒),确保关闭 init 状态的花括号和任何其他语法问题。

第二件事是您应该在初始化状态下转发控制器,而不是在构建中,因为您希望第一次转发它,而不是每次构建组件时都转发。

第三点是我想在其中制作动画的小部件,我用另一个名为 AnimatedBuilder 的小部件包装了它:它是用于构建动画的通用小部件(当然还有其他方法可以创建动画)。

最后一点是不要忘记释放你的控制器,因为你需要释放这个对象使用的资源,因为当小部件被释放时,该对象不再可用。

如果你做了所有这些(并确保阅读代码片段),它会工作得很好。

于 2022-02-11T01:26:59.133 回答