要实现一个不需要onPressed自动运行的StatefulWidget,可以使用Timer.periodic函数来设置定时器,在定时器的回调函数中执行需要自动运行的逻辑。
以下是一个示例代码:
import 'package:flutter/material.dart';
import 'dart:async';
class AutoRunWidget extends StatefulWidget {
@override
_AutoRunWidgetState createState() => _AutoRunWidgetState();
}
class _AutoRunWidgetState extends State {
Timer? _timer;
int _counter = 0;
@override
void initState() {
super.initState();
// 设置定时器,每1秒执行一次回调函数
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {
_counter++;
});
});
}
@override
void dispose() {
// 取消定时器
_timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text(
'Counter: $_counter',
style: TextStyle(fontSize: 24),
),
),
);
}
}
void main() {
runApp(MaterialApp(
home: AutoRunWidget(),
));
}
在上述示例中,AutoRunWidget是一个StatefulWidget,它在initState中设置了一个定时器,每1秒执行一次回调函数。回调函数中使用setState来更新_counter的值,然后通过build方法重新构建界面显示最新的_counter值。
在dispose方法中,取消定时器以释放资源。
这样,AutoRunWidget就会自动运行,并且每1秒更新一次界面显示的Counter值。