标题.更具体地说,我需要实现一个由FloatingActionButton
控制的秒表.然而,即使我静态声明了秒表类,我根本无法访问SetState()
成员函数,这使得不可能从外部更新秒表的开始/停止状态.
最小例子:
import 'package:flutter/material.dart';
import 'dart:async';
void main() {
runApp(
app(),
);
}
class StopWatch extends StatefulWidget {
const StopWatch({super.key});
@override
State<StopWatch> createState() => _StopWatchState();
}
class _StopWatchState extends State<StopWatch> {
static final Stopwatch _stopwatch = Stopwatch();
late Timer _timer;
String _result = "0";
void Start() {
_timer = Timer.periodic(
const Duration(milliseconds: 1),
(Timer t) {
setState(
() {
_result = _stopwatch.elapsed.inSeconds.toString();
},
);
},
);
_stopwatch.start();
}
void Stop() {
_timer.cancel();
_stopwatch.stop();
}
@override
Widget build(BuildContext context) {
return Text(_result);
}
}
class app extends StatelessWidget {
app({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SingleChildScrollView(
child: Scaffold(
body: StopWatch(),
floatingActionButton: FloatingActionButton.small(
onPressed: () {},
),
),
),
);
}
}
我试过查看事件监听程序,但它们似乎不是适合这项工作的工具.
应用程序的当前状态使得抽象出时钟逻辑变得不可行,只能使用有状态小部件来更新文本.
我也试图寻找一种将FloatingActionButton
包含在StopWatch
类中的方法,但似乎没有一种方法可以将它放在继承制的最外层,即MaterialApp
,更不用说将其放在Scaffold
类中了.