繁体   English   中英

1-setState() 或 markNeedsBuild() 在构建期间调用。 2-断言失败:第 4165 行第 12 行:':_debugLocked':不正确

[英]1-setState() or markNeedsBuild() called during build. 2-Failed assertion: line 4165 pos 12: '!_debugLocked': is not true

登录屏幕、注册屏幕等所有屏幕都显示但欢迎屏幕未显示:

错误:

1 -setState() 或 markNeedsBuild() 在构建期间调用。
2 - 断言失败:第 4165 行第 12 行:':_debugLocked'。 不是真的。
3 -'package:flutter/src/widgets/navigator.dart':断言失败:第 4165 行 pos 12:':_debugLocked'。 不是真的。

import 'package:flutter/material.dart';
import 'login_screen.dart';
import 'registration_screen.dart';
import 'package:animated_text_kit/animated_text_kit.dart';
import 'package:flash_chat/components/rounded_button.dart';
    

class WelcomeScreen extends StatefulWidget {
  static const String id = 'welcome_screen';
  @override
  _WelcomeScreenState createState() => _WelcomeScreenState();
}

class _WelcomeScreenState extends State<WelcomeScreen> with SingleTickerProviderStateMixin{
    
      late AnimationController controller;
      late Animation animation;
    
      @override
      void initState() {
        super.initState();
        controller = AnimationController(
          duration: Duration(seconds: 1),
          vsync: this,
        );
        animation = ColorTween(begin: Colors.blueGrey, end: Colors.white).animate(controller);
        controller.forward();
        controller.addListener(() {
          setState(() {});
        });
      }
    
      @override
      void dispose() {
        controller.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          backgroundColor: animation.value,
          body: Padding(
            padding: EdgeInsets.symmetric(horizontal: 24.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                Row(
                  children: <Widget>[
                    Hero(
                      tag: 'logo',
                      child: Container(
                        child: Image.asset('images/logo.png'),
                        height: 60.0,
                      ),
                    ),
                    TypewriterAnimatedTextKit(
                      text: ['Chat'],
                      textStyle: TextStyle(
                        fontSize: 45.0,
                        fontWeight: FontWeight.w900,
                        color: Colors.black54,
                      ),
                    ),
                  ],
                ),
                SizedBox(
                  height: 48.0,
                ),
                RoundedButton(
                  title: 'Log In',
                  colour: Colors.lightBlueAccent,
                  onPressed: () {
                    Navigator.pushNamed(context, LoginScreen.id);
                  },
                ),
                RoundedButton(
                  title: 'Register',
                  colour: Colors.blueAccent,
                  onPressed: () {
                    Navigator.pushNamed(context, RegistrationScreen.id);
                  },
                ),
              ],
            ),
          ),
        );
      }
    }

试试 WidgetsBinding.instance.addPostFrameCallback。

WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
 setState(() {
  });
}

复制并粘贴代码

animation = ColorTween(begin: Colors.blueGrey, end: 
Colors.white).animate(controller);
    controller.forward();
    controller.addListener(() {
      WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
         setState(() { });
         }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM