从另一个文件调用void函数

时间:2020-10-23 17:19:28

标签: flutter dart timer

我正在创建一个具有开始按钮(StartButton类)的应用程序,并且我希望该按钮从另一个类(NewRide类)中调用方法,但是如何从另一个文件中调用void函数呢?

class StartButton extends StatefulWidget{
 @override
  _StartButtonState createState() => _StartButtonState();
}
class _StartButtonState extends State<StartButton> {
  String _driverState = 'offline';

  @override
  Widget build(context){
    return FlatButton(
      child: Text('Start'),
      onPressed: (){
        setState(() {
          if (_driverState == 'offline') {
            _driverState = 'online';
          } else {
            _driverState = 'offline';
          }
        });
      },
    );
  }
}

这是“新骑”类,它具有我按开始按钮时要调用的void函数。

class NewRide extends StatefulWidget {
  @override
  _NewRideState createState() => _NewRideState();
}

class _NewRideState extends State<NewRide> {
  int _counter = 60;
  Timer _timer;

  @override
  Widget build(BuildContext context) {
    void startTimer() {
      _counter = 60;
      if (_timer != null) {
        _timer.cancel();
      }
      _timer = Timer.periodic(Duration(seconds: 1), (timer) {
        setState(() {
          if (_counter > 0) {
            _counter--;
          } else {
            _timer.cancel();
          }
        });
      });
    }

    _showNewRideAlert() {
      if (_counter == 0) {
        return Text('Counter == 0');
      } else {
        return Text('Counter != 0');
      }
    }

    return _showNewRideAlert();
  }
}

2 个答案:

答案 0 :(得分:1)

首先将另一个文件/类导入主类(我不确定您的文件名为什么)。

import '.../newRide.dart' as newRide;

然后像这样调用函数:

newRide._showNewRideAlert();

由于类/状态的设置,它可能不起作用(将不会构建窗口小部件)。因此,您可能必须将代码移到可调用的位置,例如类的顶部,或将函数实现到使用它的页面中。

答案 1 :(得分:1)

使用 GlobalKey 并公开startTimer并将NewRideState更改为_ NewRideState

python example.py