| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:flutter/material.dart'; |
| |
| class ColumnOfText extends StatefulWidget { |
| const ColumnOfText({super.key}); |
| |
| @override |
| State<ColumnOfText> createState() => ColumnOfTextState(); |
| } |
| |
| class ColumnOfTextState extends State<ColumnOfText> with SingleTickerProviderStateMixin { |
| bool _showText = false; |
| late AnimationController _controller; |
| |
| @override |
| void initState() { |
| super.initState(); |
| _controller = AnimationController( |
| vsync: this, |
| duration: const Duration(milliseconds: 300), |
| ) |
| ..addStatusListener((AnimationStatus status) { |
| if (status == AnimationStatus.completed) { |
| setState(() { |
| _showText = !_showText; |
| }); |
| _controller |
| ..reset() |
| ..forward(); |
| } |
| }) |
| ..forward(); |
| } |
| |
| @override |
| void dispose() { |
| _controller.dispose(); |
| super.dispose(); |
| } |
| |
| @override |
| Widget build(BuildContext context) { |
| return Material( |
| child: OverflowBox( |
| alignment: Alignment.topCenter, |
| maxHeight: double.infinity, |
| child: !_showText |
| ? Container() |
| : Column( |
| children: List<Widget>.generate(9, (int index) { |
| return ListTile( |
| leading: CircleAvatar( |
| child: Text('G$index'), |
| ), |
| title: Text( |
| 'Foo contact from $index-th local contact', |
| overflow: TextOverflow.ellipsis, |
| ), |
| subtitle: Text('+91 88888 8800$index'), |
| ); |
| }), |
| ), |
| ), |
| ); |
| } |
| } |