当前位置: 首页 > 知识库问答 >
问题:

从另一个文件调用空函数

顾斌
2023-03-14

我正在创建一个应用程序,它有一个开始按钮(类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';
          }
        });
      },
    );
  }
}

这是New Ride类,它具有我想在按下开始按钮时调用的空函数。

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个答案

壤驷阳冰
2023-03-14

首先将另一个文件/类导入到主类中(我不确定文件的名称)。

import'/纽里德。像纽瑞德一样飞镖

然后像这样调用函数:

newRide._showNewRideAlert();

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

鲜于子琪
2023-03-14

使用GlobalKey,将startTimer公之于众,并将NewRideState更改为uNewRidestate

class StartButton extends StatefulWidget {
  @override
  _StartButtonState createState() => _StartButtonState();
}

class _StartButtonState extends State<StartButton> {
  String _driverState = 'offline';
  GlobalKey<NewRideState> newRideKey = GlobalKey<NewRideState>();
  @override
  Widget build(context) {
    return Column(
      children: [
        NewRide(key: newRideKey),
        FlatButton(
          child: Text('Start'),
          onPressed: () {
            setState(() {
              if (_driverState == 'offline') {
                _driverState = 'online';
              } else {
                _driverState = 'offline';
              }
            });
          },
        ),
      ],
    );
  }
}



class NewRide extends StatefulWidget {
  const NewRide({Key key}) : super(key: key);
  @override
  NewRideState createState() => NewRideState();
}

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

  @override
  Widget build(BuildContext context) {
    _showNewRideAlert() {
      if (_counter == 0) {
        return Text('Counter == 0');
      } else {
        return Text('Counter != 0');
      }
    }

    return _showNewRideAlert();
  }

  void startTimer() {
    _counter = 60;
    if (_timer != null) {
      _timer.cancel();
    }
    _timer = Timer.periodic(Duration(seconds: 1), (timer) {
      setState(() {
        if (_counter > 0) {
          _counter--;
        } else {
          _timer.cancel();
        }
      });
    });
  }
}
 类似资料:
  • 问题内容: 抱歉,我确定一个基本问题,但似乎无法弄清楚。 说我有这个程序,文件名为: 如何在另一个程序中调用它?我试过了: 而不是“ hello world”,我得到了……过去我通过将第一个文件设为类来做到这一点,但我想知道如何正确导入该函数?如果有帮助,我会在我的真实文件中打印字典 问题答案: 您需要打印调用函数的结果,而不是函数本身: 另外,您可以省略子句,而不是: 如果更方便,也可以使用:

  • 问题内容: 设置:我需要在程序中使用的每个功能都有一个文件。 在此程序中,我需要从外部文件调用该函数。 我试过了: 但是我得到了错误: ImportError:没有名为“ file.py”的模块;文件不是包 我该如何解决这个问题? 问题答案: 导入时无需添加任何内容。只需编写,然后使用调用函数。之所以可能不起作用,是因为它是Python的核心模块之一,所以我建议你更改文件名。 请注意,如果你尝试将

  • 包含一个名为<code>函数 上面给出了一个错误: 导入错误:没有名为“file.py”的模块;文件不是包

  • 问题内容: 我想调用一个在second.js文件的first.js文件中定义的函数。这两个文件都在HTML文件中定义,例如: 我想打电话给在定义中。根据我的搜索结果,答案是首先定义是否可以,但是根据我的测试,我没有找到任何方法。 这是我的代码: 问题答案: 除非在同一文件中定义了该函数,或者在尝试调用该函数之前已加载了该函数,否则无法调用该函数。 除非函数的范围与尝试调用该函数的范围相同或更大,否

  • 问题内容: 我无法从另一个类Menu.swift调用GameViewController.swift中的函数。我这样调用该函数: 这是我要调用的函数: } 我在菜单类内的GameViewController.showLeaderboard()行中出现编译器错误“调用中的参数#1缺少参数”,但我不理解编译器期望的参数类型,因为我不需要任何声明就声明了该函数参数。 谢谢 问题答案: 在您定义为方法而不

  • 我正在尝试创建一个21点模拟器。在向玩家和庄家发牌之前,我需要洗牌。是一个无效函数,是类中的卡类型。职业存储从职业中发出的牌。在游戏开始时,我需要向玩家和庄家发两张牌。当我尝试在类访问 的成员函数时,我收到错误消息“调用不带对象参数的非静态成员函数”。调用成员函数的正确方法是什么?我真的对语法感到困惑。