You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:10:32