flutter - 当前小部件完成加载后如何执行方法?
问题描述
我有一个带有 2 个小部件/页面的颤振应用程序,即:
- 加载小部件/页面(在应用程序启动时出现)
- 主页小部件/页面
我想在加载页面完成加载后启动主页。基本上我的问题是 -我怎样才能知道我的小部件何时完成加载?
以下是我的代码:
// My main.dart
import 'package:flutter/material.dart';
import 'package:routes/pages/home.dart';
import 'package:routes/pages/loading.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
routes: {
'/': (context) => Loading(),
'/home': (context) => Home(),
},
);
}
}
class Loading extends StatefulWidget {
@override
_LoadingState createState() => _LoadingState();
}
class _LoadingState extends State<Loading> {
@override
void initState() {
super.initState();
// Below line of code causes problem. How can I call to route to new page after current widget has completed loading
launchAnotherWidgetAfterDoingSomething();
}
void launchAnotherWidgetAfterDoingSomething() {
// Do some necessary logic....
Navigator.pushReplacementNamed(context, '/home');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Loading screen'),
),
);
}
}
解决方案
你可以试试这个
@override
void initState() {
super.initState();
// ...
_gotoHome();
}
// ...
void _gotoHome() {
Future.delayed(Duration.zero, () {
Navigator.of(context).pushReplacementNamed('/home')
});
}
编辑
要在页面中构建每个小部件后触发操作,请将其添加到您的initState
WidgetsBinding.instance.addPostFrameCallback((_) {
// do what you want here
});
推荐阅读
- http - 正在使用 GET 请求锁定文档邪恶
- node.js - 找不到模块“ical”
- symfony4 - ReapetedType 字段在转储调试模式下不可消耗
- sql - 如何使用 sql server 获取最近 6 个月的数据与时间戳列进行比较
- c - 指向数组的 C 指针 - 我无法向自己解释
- scala - 删除scala-spark中的空白
- php - 执行 PhantomJs 过程时出错 - 文件不存在或不可执行
- php - 使用 php 中的单选按钮重定向到另一个页面
- node.js - ArcGIS JS API 4.7 和 NPM 错误
- ssl - 让我们加密 ssl 证书在 TLS 握手中发送两次