我正在尝试在应用程序首次启动时显示一个闪屏,直到我正确检索到所有数据。检索是通过名为“ProductData”的类完成的。一旦准备好,我想从闪屏页面导航到应用程序的主屏幕。
不幸的是,我找不到一个好方法来触发运行这种导航并监听提供程序的方法。
以下是我用来测试这个想法的代码。具体来说,当变量shouldProceed变为true时,我想运行命令Navigator.pushNamed(context,'home')。不幸的是,下面的代码给我带来了错误:“setState()或markNeedsBuild()在构建期间调用”。
不幸的是,我找不到一个好方法来触发运行这种导航并监听提供程序的方法。
以下是我用来测试这个想法的代码。具体来说,当变量shouldProceed变为true时,我想运行命令Navigator.pushNamed(context,'home')。不幸的是,下面的代码给我带来了错误:“setState()或markNeedsBuild()在构建期间调用”。
import 'package:catalogo/firebase/ProductData.dart';
import 'package:flutter/material.dart';=
import 'package:provider/provider.dart';
class RouteSplash extends StatefulWidget {
@override
_RouteSplashState createState() => _RouteSplashState();
}
class _RouteSplashState extends State<RouteSplash> {
bool shouldProceed = false;
@override
Widget build(BuildContext context) {
shouldProceed =
Provider.of<ProductData>(context, listen: true).shouldProceed;
if (shouldProceed) {
Navigator.pushNamed(context, 'home'); <-- The error occurs when this line is hit.
} else {
return Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
}
}
}
基于侦听提供者结果导航到页面是否有更好的方法?
Navigator
,但这会强制你从Navigator
栈中移除RouteSplash
,因为你不希望用户能够返回到闪屏界面。 - J. S.GlobalKey
访问Navigator
状态而不需要通常必须的BuildContext
,并直接从BLoC中推送。对我来说,这也不是非常干净。在我看来,导航应该留在应用程序的UI部分。还有别的方法吗? - Paco1