dart – Flutter – 键入文本动画
发布时间:2020-12-14 14:50:42 所属栏目:百科 来源:网络整理
导读:对于我的每个文本小部件,我实际上希望文本输入而不是立即显示它.有没有比使用变量更简单的方法并在setState()中添加它? 谢谢 解决方法 这可能是AnimatedBuilder的一个很好的用例.这将允许您更轻松地控制键入动画的持续时间,并仅在长度更改时重建窗口小部件.
对于我的每个文本小部件,我实际上希望文本输入而不是立即显示它.有没有比使用变量更简单的方法并在setState()中添加它?
谢谢 解决方法
这可能是AnimatedBuilder的一个很好的用例.这将允许您更轻松地控制键入动画的持续时间,并仅在长度更改时重建窗口小部件.这是一个如何做到这一点的例子.
import 'package:flutter/material.dart'; void main() { runApp(new MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Flutter Demo',theme: new ThemeData( primaryColor: const Color.fromARGB(255,199,0),accentColor: const Color.fromARGB(255,222,233,226),brightness: Brightness.dark,canvasColor: Colors.black,),home: new MyHomePage(),debugShowCheckedModeBanner: false,); } } class MyHomePage extends StatefulWidget { @override State createState() => new MyHomePageState(); } class MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin { Animation<int> _characterCount; int _stringIndex; static const List<String> _kStrings = const <String>[ 'Call trans opt: received. 2-19-98 13:24:18 REC:Log>','Trace program running.','[312]555-0690',]; String get _currentString => _kStrings[_stringIndex % _kStrings.length]; @override Widget build(BuildContext context) { ThemeData theme = Theme.of(context); TextStyle textStyle = theme.textTheme.title.copyWith( fontFamily: 'Courier New',color: theme.primaryColor,); return new Scaffold( floatingActionButton: new FloatingActionButton( child: new Icon(Icons.navigate_next),onPressed: () async { AnimationController controller = new AnimationController( duration: const Duration(milliseconds: 4000),vsync: this,); setState(() { _stringIndex = _stringIndex == null ? 0 : _stringIndex + 1; _characterCount = new StepTween(begin: 0,end: _currentString.length) .animate(new CurvedAnimation(parent: controller,curve: Curves.easeIn)); }); await controller.forward(); controller.dispose(); },body: new Container( margin: new EdgeInsets.symmetric(vertical: 50.0,horizontal: 10.0),child: _characterCount == null ? null : new AnimatedBuilder( animation: _characterCount,builder: (BuildContext context,Widget child) { String text = _currentString.substring(0,_characterCount.value); return new Text(text,style: textStyle); },); } } 如果您计划大量使用此动画文本小部件,则可以使用AnimatedWidget将其重构为单独的类. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |