簡體   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