当前小部件完成加载后如何执行方法?
Posted
技术标签:
【中文标题】当前小部件完成加载后如何执行方法?【英文标题】:How to execute a method after current widget has finished loading? 【发布时间】:2021-04-05 13:57:18 【问题描述】:我有一个带有 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'),
),
);
【问题讨论】:
【参考方案1】:你可以试试这个
@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
);
【讨论】:
这看起来只是添加延迟然后调用下一条路线?有没有一种合法的方法可以知道我名为Loading
的小部件何时完成构建?事实上,这正是我的问题。
'WidgetsBinding.instance.addPostFrameCallback' 是我要找的。谢谢!
很高兴它有帮助!以上是关于当前小部件完成加载后如何执行方法?的主要内容,如果未能解决你的问题,请参考以下文章