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

Flutter答题APP开发求助:实现按钮跳转+超时自动返回功能

Flutter 答题APP实现方案

核心逻辑

  • 主页面设置多个跳转按钮,点击后通过Navigator.push进入答题页面
  • 答题页面初始化时启动计时器,计时结束后调用Navigator.pop自动返回主页面

代码实现

1. 主页面(多按钮跳转)

import 'package:flutter/material.dart';
import 'quiz_page.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '答题APP',
      home: const HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('答题选择')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => const QuizPage(
                      quizTitle: '数学答题',
                      duration: 10,
                    ),
                  ),
                );
              },
              child: const Text('数学答题'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => const QuizPage(
                      quizTitle: '英语答题',
                      duration: 15,
                    ),
                  ),
                );
              },
              child: const Text('英语答题'),
            ),
            // 可继续添加更多题型按钮
          ],
        ),
      ),
    );
  }
}

2. 答题页面(计时自动返回)

创建quiz_page.dart文件:

import 'package:flutter/material.dart';
import 'dart:async';

class QuizPage extends StatefulWidget {
  final String quizTitle;
  final int duration; // 计时时长(单位:秒)

  const QuizPage({
    super.key,
    required this.quizTitle,
    required this.duration,
  });

  @override
  State<QuizPage> createState() => _QuizPageState();
}

class _QuizPageState extends State<QuizPage> {
  late Timer _timer;
  int _remainingTime = 0;

  @override
  void initState() {
    super.initState();
    _remainingTime = widget.duration;
    _startTimer();
  }

  void _startTimer() {
    _timer = Timer.periodic(const Duration(seconds: 1), (timer) {
      setState(() {
        _remainingTime--;
      });
      if (_remainingTime <= 0) {
        _timer.cancel();
        // 计时结束自动返回主页面
        Navigator.pop(context);
        // 可选:弹出时间到提示
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('时间到,已返回首页')),
        );
      }
    });
  }

  @override
  void dispose() {
    _timer.cancel(); // 页面销毁时取消计时器,避免内存泄漏
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.quizTitle),
        actions: [
          Padding(
            padding: const EdgeInsets.only(right: 16),
            child: Text('剩余时间:$_remainingTime秒'),
          ),
        ],
      ),
      body: const Center(
        child: Text('答题内容区域(可替换为实际题目UI)'),
      ),
    );
  }
}

关键注意事项

  • 必须在dispose方法中取消计时器,防止页面销毁后计时器持续运行造成内存泄漏
  • 可通过传递参数实现不同题型的差异化计时时长
  • 自动返回时的提示可根据需求调整或移除

内容的提问来源于stack exchange,提问作者Shakil Ahammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:45:30