CyberDemon Asked:2020-01-11 17:23:37 +0000 UTC2020-01-11 17:23:37 +0000 UTC 2020-01-11 17:23:37 +0000 UTC Flutter:是否可以检查小部件是否已呈现 772 我需要在小部件渲染后调用该方法,否则会出错。所以我想知道是否有任何方法可以检查小部件的状态,也许听众可以提供帮助? flutter 2 个回答 Voted Best Answer MiT 2020-01-11T22:36:08Z2020-01-11T22:36:08Z @Spatz 的回答很好,我也推荐阅读:如何在 Flutter 中进行渲染。但是如果你打算重复使用这个技巧,那么最好使用after_layout插件,它可以让一切变得更加方便。例子: import 'package:flutter/material.dart'; import 'package:after_layout/after_layout.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( home: new HomeScreen(), ); } } class HomeScreen extends StatefulWidget { @override HomeScreenState createState() => new HomeScreenState(); } class HomeScreenState extends State<HomeScreen> with AfterLayoutMixin<HomeScreen> { @override Widget build(BuildContext context) { // Рисуем виджет как обычно. return new Scaffold(body: new Container(color: Colors.red)); } @override void afterFirstLayout(BuildContext context) { // Здесь уже виджет отрисован. return new showDialog( context: context, builder: (context) => new AlertDialog( content: new Text('Hello World'), actions: <Widget>[ new FlatButton( child: new Text('DISMISS'), onPressed: () => Navigator.of(context).pop(), ) ], ), ); } } Spatz 2020-01-11T19:16:16Z2020-01-11T19:16:16Z 您可以使用addPostFrameCallback方法,该方法注册一个回调,以便在下一个渲染“帧”完成时调用。 @override Widget build(BuildContext context){ WidgetsBinding.instance.addPostFrameCallback((_) => onAfterBuild(context)); return Container( ... ); } void _onAfterBuild(BuildContext context){ // здесь уже виджет отрисован } 英文小文章
@Spatz 的回答很好,我也推荐阅读:如何在 Flutter 中进行渲染。但是如果你打算重复使用这个技巧,那么最好使用after_layout插件,它可以让一切变得更加方便。例子:
您可以使用addPostFrameCallback方法,该方法注册一个回调,以便在下一个渲染“帧”完成时调用。
英文小文章