【问题标题】:Error: Null check operator used on a null value - for boolean value - in Flutter错误:在 Flutter 中对空值(布尔值)使用空值检查运算符
【发布时间】:2022-07-04 23:18:55
【问题描述】:

https://flutterigniter.com/checking-null-aware-operators-dart/

Null check operator used on a null value

这些链接说如果值可以为空,那么我们可以使用?? 运算符为其赋值。我试过了,还是一样的错误:

这是数据结构

ma​​in.dart


import 'package:flutter/material.dart';
import 'dart:convert';

BigData bigDataFromJson(String str) => BigData.fromJson(json.decode(str));

class BigData {
  BigData({
    this.data,
  });
  Data? data;

  factory BigData.fromJson(Map<String, dynamic> json) => BigData(
        data: Data.fromJson(json["data"]),
      );

  Map<String, dynamic> toJson() => {
        "data": data!.toJson(),
      };
}

class Data {
  Data({
    this.lockoutDetails,
  });

  bool? lockoutDetails;

  factory Data.fromJson(Map<String, dynamic> json) => Data(
        lockoutDetails: json["lockout_details"],
      );

  Map<String, dynamic> toJson() => {
        "lockout_details": lockoutDetails,
      };
}

这里从Flutter的默认应用开始:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

这里我使用了上述数据结构中的变量lockoutDetails,它显示了错误null check operator used on a null value

class _MyHomePageState extends State<MyHomePage> {
  BigData d = BigData();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
      child:       
        d.data!.lockoutDetails ?? true
          ? const Text(
              'AAA',
            )
          : Container(),
    ));
  }
}

改正方法是什么?

【问题讨论】:

    标签: flutter dart dart-null-safety


    【解决方案1】:

    d.data在这种情况下为空,可以替换

     d.data!.lockoutDetails ?? true
    

     d.data?.lockoutDetails ?? true
    

    【讨论】:

      【解决方案2】:

      您的d.data 为空。 对于测试运行,请使用d.data?.lockoutDetails

      认为设置数据是有价值的。

      【讨论】:

        【解决方案3】:

        你可以用吗?代替 !这意味着它可能为空,也可能不为空。如果添加!你提到它不是 null 但值是未知的

        d.data?.lockoutDetails ?? true
        

        【讨论】:

          猜你喜欢
          • 2021-11-10
          • 1970-01-01
          • 2021-08-04
          • 2021-08-11
          • 2022-01-18
          • 1970-01-01
          • 2021-11-04
          • 2021-09-25
          • 2021-02-25
          相关资源
          最近更新 更多