Flutter 颤振:单击按钮重新加载飞溅屏幕

Flutter 颤振:单击按钮重新加载飞溅屏幕,flutter,dart,Flutter,Dart,我的颤振应用程序使用该软件包。只要我的数据尚未提取,SplashScreen就会保持在原位,如果出现问题(例如没有internet连接),我会显示一个按钮重试 有了这段代码,我认为当用户点击按钮时,我的SplashScreen将重新出现,我的应用程序将再次尝试获取数据,但事实并非如此 如果我在没有互联网连接的情况下重试,我只会得到一个snackbar,上面说我没有连接,没有splashscreen 如果我使用internet连接重试,我的数据将被加载,但什么也没有发生,SplashScreen不

我的颤振应用程序使用该软件包。只要我的数据尚未提取,SplashScreen就会保持在原位,如果出现问题(例如没有internet连接),我会显示一个按钮重试

有了这段代码,我认为当用户点击按钮时,我的SplashScreen将重新出现,我的应用程序将再次尝试获取数据,但事实并非如此

如果我在没有互联网连接的情况下重试,我只会得到一个snackbar,上面说我没有连接,没有splashscreen

如果我使用internet连接重试,我的数据将被加载,但什么也没有发生,SplashScreen不会出现,我的主页也不会加载。我想我做错了什么,但我不知道是什么

Future main()异步{
WidgetsFlutterBinding.ensureInitialized();
等待下载程序。初始化(调试:false);
runApp(GetMaterialApp(home:MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>new_MyAppState();
}
类MyAppState扩展了状态{
MainSingleton MainSingleton=MainSingleton();
bool authorsLoaded=false;
bool tagsLoaded=false;
@凌驾
小部件构建(构建上下文){
返回飞溅屏(
路由名称:“/”,
navigateAfterFuture:loadFromFuture(),
标题:新文本(“MyApp”),
image:image(image:AssetImage('assets/images/logo.png')),
背景颜色:Colors.white,
photoSize:100.0,
装载颜色:颜色。绿色);
}
Future loadFromFuture()异步{
final MainSingleton MainSingleton=MainSingleton();
this.authorsLoaded=等待loadAuthors(mainSingleton);
this.tagsLoaded=等待加载标签(mainSingleton);
返回buildHomePage();
}
Widget buildHomePage(){
返回材料PP(
标题:“MyApp”,
主题:主题数据(
主样本:颜色。绿色,
视觉密度:视觉密度。自适应平台密度,
),
主页:(this.authorsLoaded&&this.tagsLoaded)?主页():buildRetryPage(),
);
}
小部件buildRetryPage(){
返回脚手架(
appBar:appBar(标题:文本(“MyApp”)),
主体:容器(
填充:所有边缘设置(20.0),
子:列(
儿童:[
Text('无法获取数据'),
GFButton(
文本:“重试”,
onPressed:()异步{
设置状态(){
//设置状态应该重建SplashScreen并调用我的加载函数,对吗?
//然后,如果一切正常,启动HomePage(),对吗?
});
}),
],
),
),
);
}
显然,如果我第一次使用互联网连接启动应用程序,一切都会很好,我的splashscreen会显示出来,我的主页也会显示出来


如果有人有想法?

只需再次调用同一页即可

var route = MaterialPageRoute(builder:(context)=> MyApp());
Navigator.of(context).pushReplacement(route);
pushReplacement将当前页替换为新页,这意味着旧页不会保留在内存堆栈中