Flutter:在构建期间调用 setState() 或 markNeedsBuild()
Posted
技术标签:
【中文标题】Flutter:在构建期间调用 setState() 或 markNeedsBuild()【英文标题】:Flutter : setState() or markNeedsBuild() called during build 【发布时间】:2021-01-19 11:00:12 【问题描述】:实际上,我是 Flutter 的新手。这是我的初始屏幕代码。
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()。 这个 Overlay 小部件不能被标记为需要构建,因为框架已经在 构建小部件的过程。可以在构建阶段将小部件标记为需要构建 仅当其祖先之一当前正在建造时。这个例外是允许的,因为框架 在孩子之前构建父小部件,这意味着将始终构建脏后代。 否则,框架可能不会在此构建阶段访问此小部件。 调用 setState() 或 markNeedsBuild() 的小部件是: 叠加层-[LabeledGlobalKey#5e01c]
请帮我解决这个错误。
【问题讨论】:
@SingleSoul 有解决这个问题的办法吗? 【参考方案1】:尝试在 initState 中添加一个计时器,例如
@override
void initState()
Timer(new Duration(seconds: 2), ()
.
.
.
);
super.initState();
【讨论】:
以上是关于Flutter:在构建期间调用 setState() 或 markNeedsBuild()的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 在构建期间调用 setState() 或 markNeedsBuild()
在构建期间调用 setState() 或 markNeedsBuild() - Flutter
Flutter:在构建错误期间调用了 setState() 或 markNeedsBuild()
Flutter :setState() 或 markNeedsBuild() 在构建期间调用