Flutter中如何从函数取值并在Text Widget实时显示动态值
问题修复方案
你的代码存在三个核心问题导致无法实现预期效果,以下是具体修复步骤和完整代码:
1. 移除无限死循环
valuerandomer函数里的while (count != -1)是无限循环,会直接卡死程序,永远执行不到后续的value更新和setState逻辑。由于定时器每500ms会自动触发一次回调,每次回调只需要更新一次value即可,完全不需要这个循环。
2. 启动定时任务
需要在页面初始化时调用valuerandomer()来启动定时器,否则定时逻辑根本不会运行。可以在initState生命周期方法中完成调用。
3. 正确绑定显示变量
Text组件里应该直接绑定$value,而不是写$valuerandomer()——后者只会把函数的toString结果显示出来,并不是你需要的数值内容。
修改后的完整代码
import 'dart:async'; import 'dart:math'; import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: const RootPage(), ); } } class RootPage extends StatefulWidget { const RootPage({super.key}); @override State<RootPage> createState() => _RootPageState(); } class _RootPageState extends State<RootPage> { int value = 75; Timer? _timer; @override void initState() { super.initState(); valuerandomer(); // 初始化时启动定时任务 } @override void dispose() { _timer?.cancel(); super.dispose(); } void valuerandomer() { _timer = Timer.periodic( const Duration(milliseconds: 500), (t) { const int max = 1000; final Random rnd = Random(); // 每次回调更新一次value,移除死循环 value += rnd.nextInt(6) + (-5); // 限制value的范围 if (value > max - 1) { value = 999; } else if (value < 0) { value = 0; } print(value); setState(() {}); // 通知UI更新 }, ); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color.fromARGB(255, 12, 12, 12), body: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Stack( alignment: Alignment.center, children: [ Image.asset('images/SQUARE.png'), Center( child: Text( '$value', // 直接显示value变量 textAlign: TextAlign.center, style: const TextStyle( color: Color.fromARGB(255, 255, 106, 0), fontSize: 90, fontFamily: "MyFont"), ), ), ], ), ], ), ); } }
内容的提问来源于stack exchange,提问作者yarinmats
相关产品推荐
相关产品推荐

