我如何在颤动中为打开屏幕文本设置动画?

时间:2021-01-22 13:16:15

标签: flutter dart setstate flutter-animation

我尝试了其他 StackOverflow 答案,总而言之,提到了 onPressed() 并且在那里调用了 setState() 但我不知道在我的应用程序中在哪里调用 setState() 因为我没有任何纽扣。那么这里真的需要 setState() 吗? 这是我的主要课程

class OpeningScreen extends StatefulWidget {
  @override
  _OpeningScreenState createState() => _OpeningScreenState();
}

class _OpeningScreenState extends State<OpeningScreen> {
  @override

  void initState(){
    super.initState();
    Timer(Duration(seconds: 5), () => Navigator.of(context)
        .pushAndRemoveUntil(MaterialPageRoute(
        builder: (context) => home_screen()),
            (Route<dynamic> route) => false));
  }
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        decoration: openingScreenBgDecoration,
        child: Center(
          child: Column(
            children: [
              textAnimation(welcomeText),
            ],
          ),
        ),
      ),
    );
  }
}

这是我声明动画默认文本样式的地方

String welcomeText = "Welcome to My App";
bool animated = true;

TextStyle openingScreenTextStyle =
    TextStyle(
        color: Colors.black,
        fontSize: 48.0,
        fontWeight: FontWeight.bold,
    );

TextStyle openingScreenTextStyle1 =
TextStyle(
    color: Colors.black,
    fontSize: 24.0,
    fontWeight: FontWeight.bold,
);

textAnimation (welcomeText){
    AnimatedDefaultTextStyle(
        child: Text(welcomeText),
        style: animated ? openingScreenTextStyle : openingScreenTextStyle1,
        duration: Duration(milliseconds: 200));
    return textAnimation;
}

这是我得到的错误

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _TypeError was thrown building OpeningScreen(dirty, state: _OpeningScreenState#aa235):
type '(dynamic) => dynamic' is not a subtype of type 'Widget'

The relevant error-causing widget was:
  OpeningScreen file:///C:/Users/IdeaProjects/i_app/lib/main.dart:5:13

When the exception was thrown, this was the stack:
#0      _OpeningScreenState.build (package:i_app/ui/neercs_gninepo.dart:29:15)
#1      StatefulElement.build (package:flutter/src/widgets/framework.dart:4663:28)
#2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4546:15)
#3      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#4      Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#5      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4525:5)
#6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4710:11)
#7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4520:5)
...     Normal element mounting (132 frames)
#139    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3490:14)
#140    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5991:32)
...     Normal element mounting (267 frames)
#407    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3490:14)
#408    Element.updateChild (package:flutter/src/widgets/framework.dart:3258:18)
#409    RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1174:16)
#410    RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1145:5)
#411    RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1087:17)
#412    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2620:19)
#413    RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1086:13)
#414    WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:927:7)
#415    WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:908:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)

════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following _TypeError was thrown building OpeningScreen(dirty, state: _OpeningScreenState#aa235):
type '(dynamic) => dynamic' is not a subtype of type 'Widget'

The relevant error-causing widget was: 
  OpeningScreen file:///C:/Users/IdeaProjects/i_app/lib/main.dart:5:13
When the exception was thrown, this was the stack: 
#0      _OpeningScreenState.build (package:i_app/ui/neercs_gninepo.dart:29:15)
#1      StatefulElement.build (package:flutter/src/widgets/framework.dart:4663:28)
#2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4546:15)
#3      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#4      Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)

1 个答案:

答案 0 :(得分:0)

它奏效了。做了一些改动。

WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      setState(() {
      animated = !animated;
    });
    });

在 initState() 中只有我声明了 setState() 并且对于这个错误

type '(dynamic) => dynamic' is not a subtype of type 'Widget'

我直接在 children 内部声明了 AnimatedDefaultTextStyle