From a2d2b18c1f786e1438911abf42f5e996ade88ad7 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Sat, 22 Apr 2023 09:05:32 +0800 Subject: [PATCH] StatelessWidget --- lib/guess/guess_page.dart | 22 +++++++++++++++++---- lib/guess/result_notice.dart | 37 +++++------------------------------- 2 files changed, 23 insertions(+), 36 deletions(-) diff --git a/lib/guess/guess_page.dart b/lib/guess/guess_page.dart index 4e50669..7323add 100644 --- a/lib/guess/guess_page.dart +++ b/lib/guess/guess_page.dart @@ -14,16 +14,30 @@ class GuessPage extends StatefulWidget { State createState() => _GuessPageState(); } -class _GuessPageState extends State { +class _GuessPageState extends State with SingleTickerProviderStateMixin{ + + late AnimationController controller; + + @override + void initState() { + super.initState(); + controller = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 200), + ); + } + int _value = 0; Random _random = Random(); bool _guessing = false; bool? _isBig; + @override void dispose() { _guessCtrl.dispose(); + controller.dispose(); super.dispose(); } @@ -42,7 +56,7 @@ class _GuessPageState extends State { int? guessValue = int.tryParse(_guessCtrl.text); // 游戏未开始,或者输入非整数,无视 if (!_guessing || guessValue == null) return; - + controller.forward(from: 0); //猜对了 if (guessValue == _value) { setState(() { @@ -70,10 +84,10 @@ class _GuessPageState extends State { Column( children: [ if(_isBig!) - ResultNotice(color:Colors.redAccent,info:'大了'), + ResultNotice(color:Colors.redAccent,info:'大了',controller: controller,), Spacer(), if(!_isBig!) - ResultNotice(color:Colors.blueAccent,info:'小了'), + ResultNotice(color:Colors.blueAccent,info:'小了',controller: controller,), ], ), Center( diff --git a/lib/guess/result_notice.dart b/lib/guess/result_notice.dart index 37b3655..b239d69 100644 --- a/lib/guess/result_notice.dart +++ b/lib/guess/result_notice.dart @@ -1,54 +1,27 @@ import 'package:flutter/material.dart'; -class ResultNotice extends StatefulWidget { +class ResultNotice extends StatelessWidget { final Color color; final String info; + final AnimationController controller; const ResultNotice({ Key? key, required this.color, required this.info, + required this.controller, }) : super(key: key); - @override - State createState() => _ResultNoticeState(); -} - -class _ResultNoticeState extends State with SingleTickerProviderStateMixin { - late AnimationController controller; - - @override - void initState() { - super.initState(); - controller = AnimationController( - vsync: this, - duration: const Duration(milliseconds: 200), - ); - controller.forward(); - } - - @override - void dispose() { - controller.dispose(); - super.dispose(); - } - - @override - void didUpdateWidget(covariant ResultNotice oldWidget) { - controller.forward(from: 0); - super.didUpdateWidget(oldWidget); - } - @override Widget build(BuildContext context) { return Expanded( child: Container( alignment: Alignment.center, - color: widget.color, + color: color, child: AnimatedBuilder( animation: controller, builder: (_, child) => Text( - widget.info, + info, style: TextStyle( fontSize: 54 * (controller.value), color: Colors.white,