Метод dispose
Метод dispose класса ScrollController
отпускает контроллер прокрутки и снимает его слушателей.
Вызов ставят в dispose состояния, когда контроллер больше не нужен.
Синтаксис
controller.dispose()
Пример
Давайте вызовем его в простом экране:
import 'package:flutter/material.dart';
class DisposeDemo extends StatefulWidget
{
@override
State<DisposeDemo> createState() => _DisposeDemoState();
}
class _DisposeDemoState extends State<DisposeDemo>
{
late final ScrollController controller = ScrollController();
@override
void dispose()
{
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context)
{
return ListView(controller: controller, children: [Text('abcde')]);
}
}
void main()
{
runApp(MaterialApp(home: Scaffold(body: DisposeDemo())));
}
На экране список работает, контроллер освобождается при уничтожении State.
Пример
Давайте повторим вызов с другими числами:
import 'package:flutter/material.dart';
class DisposeDemo2 extends StatefulWidget
{
@override
State<DisposeDemo2> createState() => _DisposeDemo2State();
}
class _DisposeDemo2State extends State<DisposeDemo2>
{
ScrollController? controller;
@override
void initState()
{
super.initState();
controller = ScrollController();
}
@override
void dispose()
{
controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context)
{
return ListView(controller: controller, children: [Text('12345')]);
}
}
void main()
{
runApp(MaterialApp(home: Scaffold(body: DisposeDemo2())));
}
На экране тот же список, dispose безопасен для nullable controller.
Смотрите также
-
метод
animateTo,
который часто ставят рядом в прокручиваемых экранах -
класс
ScrollPosition,
который дополняет работу с прокруткой -
метод
jumpTo,
который помогает собрать сложный список -
метод
jumpTo,
который задаёт поведение или данные прокрутки