Виджет AnimatedPositioned
Виджет AnimatedPositioned анимирует изменения параметров при setState.
Синтаксис
AnimatedPositioned(
duration: duration,
child: child,
)
Параметры
| Параметр | Описание |
|---|---|
duration |
Параметр AnimatedPositioned.
|
top |
Параметр AnimatedPositioned.
|
left |
Параметр AnimatedPositioned.
|
curve |
Параметр AnimatedPositioned.
|
child |
Параметр AnimatedPositioned.
|
Пример
Давайте сменим параметры по кнопке:
import 'package:flutter/material.dart';
class Demo extends StatefulWidget {
const Demo({super.key});
@override
State<Demo> createState() => _DemoState();
}
class _DemoState extends State<Demo> {
bool big = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
height:120,width:200,child:Stack(children:[AnimatedPositioned(duration:Duration(milliseconds:400),top:big?0:60,left:0,child:Text('abcde'))]),
),
ElevatedButton(
onPressed: () => setState(() => big = !big),
child: Text('toggle'),
),
],
),
),
),
);
}
}
void main() {
runApp(const Demo());
}
На экране AnimatedPositioned плавно доедет до новых значений, текст 'abcde' останется внутри.
Пример
Давайте повторим переход для второго состояния:
import 'package:flutter/material.dart';
class Demo extends StatefulWidget {
const Demo({super.key});
@override
State<Demo> createState() => _DemoState();
}
class _DemoState extends State<Demo> {
bool big = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
height:120,width:200,child:Stack(children:[AnimatedPositioned(duration:Duration(milliseconds:400),top:big?60:0,left:40,child:Text('12345'))]),
),
ElevatedButton(
onPressed: () => setState(() => big = !big),
child: Text('toggle'),
),
],
),
),
),
);
}
}
void main() {
runApp(const Demo());
}
На экране после toggle снова сработает AnimatedPositioned, подпись '12345' внутри виджета.
Смотрите также
-
класс
AnimationController,
который задаётduration -
класс
Curves,
который задаётcurve -
виджет
AnimatedBuilder,
когда нужен ручнойbuilder -
виджет
MaterialApp,
корень примеров