Значение типа bool? не может быть присвоено переменной типа 'bool', потому что 'bool?' допускает значение NULL, а "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?' допускает значение NULL, а bool - нет. если (Get.isDialogOpen) Get.back();

Я получил ошибку в строке, если условие Get.isDialogOpen

1 ответ

Вы получаете эту ошибку, потому что метод получения возвращает Optional. Это означает, что возвращаемое значение может быть true, false или null. Но поскольку условия if могут работать только с логическими значениями, SDK сообщает вам, что при возврате значения NULL возникнет ошибка.

Итак, чтобы исправить это, либо вы говорите компилятору, что уверены, что ваш метод получения никогда не вернет значение NULL, либо вы должны указать значение по умолчанию в случае, если значение NULL возвращается из .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
Другие вопросы по тегам