The argument type 'AnimationController?' can't be assigned to the parameter type 'Animation<double>'

1,163

You need to use controller! here CurvedAnimation(parent: controller!... like bellow:

 @override   void initState() {
    super.initState();
    controller = AnimationController(
      vsync: this,
      duration: Duration(seconds: 1),
      upperBound: 100,
    );
    animation = CurvedAnimation(parent: controller!, curve: Curves.decelerate);
    controller!.forward();

    controller!.addListener(() {
      setState(() {});
      print(controller!.value);
    });   }

AnimationController can be assigned to Animation<Double> since AnimationController extends Animation<double> the only problem is of null safety. In the tutorial they have initialized AnimationController with late keyword but since you have used AnimationController? you need to make it null safe.

Share:
1,163
Sunny
Author by

Sunny

Updated on January 01, 2023

Comments

  • Sunny
    Sunny over 1 year

    I am new to Flutter.

    So I am trying to use Curved animations in flutter but it gives me a type error as mentioned in the title. I have shared my main.dart and welcome_screen.dart below. In documentation https://flutter.dev/docs/development/ui/animations/tutorial they have also used the Animationcontroller and a curve (along with Tween) and I think I have done the same. How to solve this?

    main.dart

    import 'package:flutter/material.dart'; import 'package:flash_chat/screens/welcome_screen.dart'; import 'package:flash_chat/screens/login_screen.dart'; import 'package:flash_chat/screens/registration_screen.dart'; import 'package:flash_chat/screens/chat_screen.dart';
    
    void main() => runApp(FlashChat());
    
    class FlashChat extends StatelessWidget {   @override   Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData.dark().copyWith(
            textTheme: TextTheme(bodyText1: TextStyle(color: Colors.black54)),
          ),
          initialRoute: WelcomeScreen.id,
          routes: {
            WelcomeScreen.id: (context) => WelcomeScreen(),
            LoginScreen.id: (context) => LoginScreen(),
            RegistrationScreen.id: (context) => RegistrationScreen(),
            ChatScreen.id: (context) => ChatScreen(),
          },
        );   } }
    

    welcome_screen.dart

    import 'package:flutter/material.dart'; import 'package:flash_chat/screens/login_screen.dart'; import 'package:flash_chat/screens/registration_screen.dart';
    
    class WelcomeScreen extends StatefulWidget {   static const String id
    = 'welcome_screen';
    
      @override   _WelcomeScreenState createState() =>
    _WelcomeScreenState(); }
    
    class _WelcomeScreenState extends State<WelcomeScreen>
        with SingleTickerProviderStateMixin {   AnimationController? controller;   Animation? animation;
    
      @override   void initState() {
        super.initState();
        controller = AnimationController(
          vsync: this,
          duration: Duration(seconds: 1),
          upperBound: 100,
        );
        animation = CurvedAnimation(parent: controller, curve: Curves.decelerate);
        controller!.forward();
    
        controller!.addListener(() {
          setState(() {});
          print(controller!.value);
        });   }
    
      @override   Widget build(BuildContext context) {
        return Scaffold(
          backgroundColor: Colors.white,
          body: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 24),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: [
                Row(
                  children: [
                    Hero(
                      tag: 'logo',
                      child: Container(
                        child: Image.asset('images/logo.png'),
                        height: controller!.value,
                      ),
                    ),
                    Text(
                      'Flash Chat',
                      style: TextStyle(
                        fontSize: 45.0,
                        fontWeight: FontWeight.w900,
                        color: Colors.blueGrey.shade300,
                      ),
                    ),
                  ],
                ),
                SizedBox(
                  height: 48,
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 16),
                  child: Material(
                    elevation: 5.0,
                    color: Colors.lightBlueAccent,
                    borderRadius: BorderRadius.circular(30.0),
                    child: TextButton(
                      style: ButtonStyle(
                        foregroundColor:
                            MaterialStateProperty.all<Color>(Colors.white),
                      ),
                      onPressed: () {
                        Navigator.pushNamed(context, LoginScreen.id);
                      },
                      child: Text('Login'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 16),
                  child: Material(
                    elevation: 5.0,
                    color: Colors.lightBlueAccent,
                    borderRadius: BorderRadius.circular(30.0),
                    child: TextButton(
                      style: ButtonStyle(
                        foregroundColor:
                            MaterialStateProperty.all<Color>(Colors.white),
                      ),
                      onPressed: () {
                        Navigator.pushNamed(context, RegistrationScreen.id);
                      },
                      child: Text('Register'),
                    ),
                  ),
                )
              ],
            ),
          ),
        );   } }
    

    My full error is below

    Performing hot reload...
    Syncing files to device Lenovo TB 7504X...
    lib/screens/welcome_screen.dart:25:41: Error: The argument type 'AnimationController?' can't be assigned to the parameter type 'Animation<double>' because 'AnimationController?' is nullable and 'Animation<double>' isn't.
     - 'AnimationController' is from 'package:flutter/src/animation/animation_controller.dart' ('/C:/src/flutter_windows_2.5.1-stable/flutter/packages/flutter/lib/src/animation/animation_controller.dart').
     - 'Animation' is from 'package:flutter/src/animation/animation.dart' ('/C:/src/flutter_windows_2.5.1-stable/flutter/packages/flutter/lib/src/animation/animation.dart').
        animation = CurvedAnimation(parent: controller, curve: Curves.decelerate);
                                            ^
    
  • Sunny
    Sunny over 2 years
    Dead right bro Thanks!!!!
  • Sunny
    Sunny over 2 years
    I somehow missed that. Thanks a lot!!!!