Класс TickerCanceled
AnimationController ждёт кадры через ticker.
Если виджет с
SingleTickerProviderStateMixin
уничтожили, await на forward или reverse
завершится ошибкой TickerCanceled.
Синтаксис
throw TickerCanceled();
Пример
Давайте поймать TickerCanceled и показать abcde:
import 'package:flutter/material.dart';
class Demo extends StatefulWidget {
@override
State<Demo> createState() => _DemoState();
}
class _DemoState extends State<Demo>
with SingleTickerProviderStateMixin
{
late AnimationController controller;
@override
void initState()
{
super.initState();
controller = AnimationController(
vsync: this,
duration: const Duration(seconds: 2),
);
_run();
}
Future<void> _run() async
{
try {
await controller.forward();
} on TickerCanceled {
print('abcde');
}
}
@override
void dispose()
{
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context)
{
return const Center(
child: Text('abcde'),
);
}
}
void main()
{
runApp(
const MaterialApp(
home: Demo(),
),
);
}
На экране 'abcde'; при dispose в консоли появится 'abcde' из catch.
Пример
Давайте вывести 12345 при отмене:
import 'package:flutter/scheduler.dart';
void main()
{
try {
throw TickerCanceled();
} on TickerCanceled {
print('12345');
}
}
Результат выполнения кода
12345
Смотрите также
-
класс
AnimationController,
который await бросаетTickerCanceled -
mixin
SingleTickerProviderStateMixin,
который создаёт ticker для контроллера -
класс
FlutterError,
еслиTickerCanceledне поймали -
класс
FlutterErrorDetails,
который передают вreportError