颤振错误-在构建期间调用setState()或markNeedsBuild()



我是新来的,我在这里试图检查用户偏好键是否存在(来自服务器API),如果它存在,请转到登录界面,否则转到登录。

我在Future, async和所有这些东西上遇到了很多麻烦,所以我可能犯了一个愚蠢的错误,但是我找不到它。

无论如何,我得到的错误是

在构建FutureBuilder(dirty, state: _FutureBuilderState#5ce9a)时抛出以下断言:setState()或markNeedsBuild()在构建过程中调用。

谁能帮我一下吗?谢谢!

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Startup extends StatefulWidget {
const Startup({Key? key}) : super(key: key);
@override
State<Startup> createState() => _StartupState();
}
class _StartupState extends State<Startup> {
Future<String> isLoggedIn() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
if (prefs.getString("key") != null) {
return "/MyTasks";
} else {
return "/Login";
}
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: isLoggedIn(),
builder: (context, snapshot) {
if (snapshot.hasData) {
Navigator.of(context).pushReplacementNamed(snapshot.data.toString());
} else if (snapshot.hasError) {
Text(snapshot.error.toString());
}
return const CircularProgressIndicator();
},
);
}
}

我只是通过添加异步库和围绕我的路由器推送命令定时器解决了这个问题,像这样:

Timer.run(() {
Navigator.of(context).pushReplacementNamed(snapshot.data.toString());
});

我把它留在这里,以防有人犯同样的错误。

最新更新