'bool?' 类型的值不能分配给类型为 'bool' 的变量,因为 'bool?'可以为空,而 'bool' 不是

问题描述

这是我的完整代码...

import 'package:Flutter/cupertino.dart';
import 'package:Flutter/material.dart';
import 'package:get/get.dart';

class DialogHelper{
  //show error dialog
 static void showErrorDialog({String title='error',String description='Something went wrong'})
  {
    Get.dialog(
      Dialog(
        child: Padding(
          padding: const EdgeInsets.all(8.0),child: Column(
            mainAxisSize: MainAxisSize.min,children: [
              Text(title,style: Get.textTheme.headline4,),Text(description,style: Get.textTheme.headline6,ElevatedButton(onpressed: () {
                if (Get.isDialogopen) Get.back();
              },child: Text('okay')),],);

  }
}

我遇到了这个错误

19:25:错误:“bool”类型的值?不能分配给类型为 'bool' 的变量,因为 'bool?'可以为空,而 'bool' 不是。 if (Get.isDialogopen) Get.back();

如果条件为 Get.isDialogopen,我在线上出错

解决方法

您收到该错误是因为 getter isDialogOpen 返回一个 Optional。这意味着返回值可以是 truefalsenull。但是,由于 if 条件只能与布尔值一起使用,因此 SDK 会告诉您如果 isDialogOpen 返回 null 会出现错误。

所以要解决这个问题,要么告诉编译器你确信你的 getter 永远不会返回空值,要么你必须给出一个默认值,以防从 .isDialogOpen 返回空值。我们分别这样做;

1-

  Get.isDialogOpen! \\ this means you are sure a null can't be returned

2-

 Get.isDialogOpen ?? false \\ this means incase a null is returned use false   

注意:如果您使用数字 1,并且最终返回空值,您的代码将在运行时崩溃。为避免这种情况,您可以告诉编译器仅在 isDialogOpen 已初始化时调用它。即

Get?.isDialogOpen ?? false \\If isDialogOpen is not initialized,false will be used