如果语句在我的 Dart Flutter 代码中被注册为变量?我该如何改变这个?

Posted

技术标签:

【中文标题】如果语句在我的 Dart Flutter 代码中被注册为变量?我该如何改变这个?【英文标题】:If statement is being registered as a variable in my Dart Flutter code? How do I change this? 【发布时间】:2020-10-02 09:00:58 【问题描述】:

图像中突出显示的文本给了我类似问题控制台中显示的错误。在处理 if 语句时,我从未收到过这类问题,我想知道为什么它们没有注册为 if 语句。在其中一个错误中,它说“如果已定义”,但它不是变量。我该如何解决这个问题?它与异步功能有什么关系吗?我在这些方面苦苦挣扎

我正在尝试为我计划在颤振应用程序中实施的地图请求用户位置数据,但它不起作用:/ 我无法解决的 if 有问题。

Future<bool> assignService(Location loc) async 
  bool servicestatus = await loc.serviceEnabled();
  return servicestatus;


Future<PermissionStatus> assignPermission(Location loc) async 
  return await loc.hasPermission();


Future<LocationData> assignLocation(Location loc) async 
  return await loc.getLocation();


Location location = new Location();

var _serviceEnabled = assignService(location);

if (_serviceEnabled != true) 
  _serviceEnabled = assignService(location);
  if (!_serviceEnabled) 
    return;
  


var _permissionGranted = assignPermission(location);

if (_permissionGranted == PermissionStatus.denied) async
  _permissionGranted = await location.requestPermission();
  if (_permissionGranted != PermissionStatus.granted) 
    return;
  


var _locationData = assignLocation(location);

更新(上面的代码):

  Future<bool> assignService(Location loc) async 
  bool servicestatus = await loc.serviceEnabled();
  return servicestatus;


Future<PermissionStatus> assignPermission(Location loc) async 
  return await loc.hasPermission();


Future<LocationData> assignLocation(Location loc) async 
  return await loc.getLocation();


Location location = Location();

var _serviceEnabled = assignService(location);

var _permissionGranted = assignPermission(location);

【问题讨论】:

【参考方案1】:

您在函数之外编写代码。 只有变量声明可以在函数之外,不能在代码之外。

例如你可以这样做:

  void StartService() 
    if (_serviceEnabled != true) 
      _serviceEnabled = assignService(location);
      if (!_serviceEnabled) 
        return;
      

    if (_permissionGranted == PermissionStatus.denied) async
      _permissionGranted = await location.requestPermission();
      if (_permissionGranted != PermissionStatus.granted) 
        return;
      
    
  

if 不应该在代码块之外。 你必须把它放在一个函数中。这就解释了你的错误。

如果您需要更多详细信息,请告诉我。

编辑:仅供参考,flutter 中不再需要“new”关键字。

【讨论】:

非常感谢! if 语句现在运行。但是我遇到了关于前 2 个 if 语句的另一个问题。这是错误消息:“否定运算符必须具有静态类型的布尔”,我认为这是因为它仍然是一个未来,但我该如何改变呢?【参考方案2】:

解决方案很简单if 不能是你应该在函数内部进行if 检查的类的成员。

void doIfChecks()
// if statements

希望这会对你有所帮助。

【讨论】:

非常感谢! if 语句现在运行。但是我遇到了关于前 2 个 if 语句的另一个问题。这是错误消息:“否定运算符必须具有静态类型的布尔”,我认为这是因为它仍然是一个未来,但我该如何改变呢? 您可以在 if 语句中的 future 前面简单地添加 await 关键字 如何将其添加到我的代码中?我也不需要异步吗?另外我已经在我的函数中等待了值,为什么我需要做两次?再次感谢您 在分配变量 _seriveEnabled 和 _permissionGranted 时使用 await,因此您不需要在 if 语句中使用 await,您需要使用 await 方法返回 future。

以上是关于如果语句在我的 Dart Flutter 代码中被注册为变量?我该如何改变这个?的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter/dart 的 Futurebuilder 中访问我的未来不起作用

如何使用 if 语句在“flutter / dart”中发送 https 发布请求

如何禁用 Flutter/Dart 实验?

Flutter/Dart - 文本值未正确显示

Flutter入门Dart语言:控制流语句的基本用法

在我的堆叠图像文件 (Flutter) 之后我有多余的空间