Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
936 of 1024 menu
◀ ▶

Метод addPostFrameCallback

Метод addPostFrameCallback миксина WidgetsBinding вызывают на WidgetsBinding.instance. Колбэк выполняется один раз после завершения текущего кадра.

Синтаксис

WidgetsBinding.instance.addPostFrameCallback((Duration timeStamp) { // код })

Параметры

ПараметрОписание
callbackФункция без возвращаемого значения, получает метку времени кадра.

Пример

Давайте обновим текст после первого кадра:

import 'package:flutter/material.dart'; void main() => runApp(MaterialApp(home: Scaffold(body: Center(child: FrameTick())))); class FrameTick extends StatefulWidget { const FrameTick({super.key}); @override State<FrameTick> createState() => _FrameTickState(); } class _FrameTickState extends State<FrameTick> { String label = '12345'; @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { setState(() => label = 'abcde'); }); } @override Widget build(BuildContext context) => Text(label); }

На экране сначала '12345', затем 'abcde'.

Пример

Давайте прочитаем context.size после layout:

import 'package:flutter/material.dart'; void main() => runApp(MaterialApp(home: Scaffold(body: SizeProbe()))); class SizeProbe extends StatefulWidget { const SizeProbe({super.key}); @override State<SizeProbe> createState() => _SizeProbeState(); } class _SizeProbeState extends State<SizeProbe> { String label = 'abcde'; @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { final box = context.findRenderObject() as RenderBox?; setState(() => label = box == null ? '12345' : 'ok'); }); } @override Widget build(BuildContext context) => Center(child: Text(label)); }

На экране после кадра текст сменится с 'abcde' на 'ok', если layout готов.

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить