Flutter:在构建期间调用setState()或markNeedsBuild()

时间:2020-10-04 11:28:25

标签: firebase flutter dart

实际上,我是新手。这是我的启动画面代码。

  void main() async {
     WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    runApp(MyApp());
    }

 class MyApp extends StatelessWidget {

 @override
 Widget build(BuildContext context) {
 return MaterialApp(
 debugShowCheckedModeBanner: false,
 title: 'Meet Up',
 theme: ThemeData(
   primarySwatch: Colors.blue,
 ),
   home: IntroScreen(),);

}
}

class IntroScreen extends StatefulWidget{

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

class _IntroScreenState extends State<IntroScreen> {

@override
void initState() {
super.initState();

FirebaseAuth auth =  FirebaseAuth.instance;
if (auth.currentUser != null)
  {
    Navigator.pushReplacement(
      context,
      MaterialPageRoute(builder: (context) => Home(uid: auth.currentUser.uid)),
    );
  }
else
  {
    Navigator.pushReplacement(
      context,
      MaterialPageRoute(builder: (context) => SignUp()),
    );
   }

 }

 @override
 Widget build(BuildContext context) {
 return new SplashScreen(
      seconds: 5,
      title: new Text('Welcome To Meet up!',
      style: new TextStyle(
          fontWeight: FontWeight.bold,
          fontSize: 20.0
      ),),
    image: Image.asset('assets/images/dart.png',fit:BoxFit.scaleDown),
    backgroundColor: Colors.white,
    styleTextUnderTheLoader: new TextStyle(),
    photoSize: 100.0,
    onClick: ()=>print("flutter"),
    loaderColor: Colors.red
);
}
}

我遇到以下错误:

构建Builder时引发了以下断言: 在构建期间调用setState()或markNeedsBuild()。 无法将该叠加层窗口小部件标记为需要构建,因为该框架已经在 构建小部件的过程。可以在构建阶段将小部件标记为需要构建 仅当其祖先之一正在建造时。允许此异常是因为框架 在子代之前构建父窗口小部件,这意味着将始终构建脏后代。 否则,框架在此构建阶段可能不会访问此小部件。 调用setState()或markNeedsBuild()的小部件为: 叠加-[LabeledGlobalKey#5e01c]

请帮助我解决此错误。

1 个答案:

答案 0 :(得分:0)

尝试在initState之内添加计时器,例如

  @override
  void initState() {
    Timer(new Duration(seconds: 2), () {
     .
     .
     .
    });
    super.initState();
  }