【问题标题】:how to solve flutter null value issue in my code?如何解决我的代码中的颤振空值问题?
【发布时间】:2022-01-21 08:10:33
【问题描述】:

我想保留 null 作为产品 ID 的默认值,因为它稍后会自动生成,但由于颤振 null 安全检查,我不能。 这是我要保留 id = null 的实例创建代码:

var _editedProduct = Product(
    id: null,
    title: '',
    price: 0,
    description: '',
    imageUrl: '',
  );

这是我的 Product.dart 文件的代码:

import 'package:flutter/material.dart';

class Product with ChangeNotifier {
  final String id;
  final String title;
  final String description;
  final double price;
  final String imageUrl;
  bool isFavorite;

  Product({
    required this.id,
    required this.title,
    required this.description,
    required this.price,
    required this.imageUrl,
    this.isFavorite = false,
  });

  void toggleFavoriteStatus() {
    isFavorite = !isFavorite;
    notifyListeners();
  }
}

错误截图

【问题讨论】:

  • 您的 id 必须是 String?,这意味着它可以接受空值。
  • 这解决了我的问题:final String? productId = ModalRoute.of(context)!.settings.arguments as String?;

标签: flutter dart null


【解决方案1】:

虽然您喜欢将id 默认值设为空,但首先您需要接受可为空的数据。对于final String id; 将是final String? id;,可以通过删除required 作为可选值在构造函数上提供默认值。 id 默认有null

要使用id,你需要检查它是否为空。

如果您确定它包含数据,请在末尾使用!,例如id!,或者

提供一个默认值,例如id??"default",或者

if(Product.id!=null){...}

class Product with ChangeNotifier {
  final String? id;
  final String title;
  final String description;
  final double price;
  final String imageUrl;
  bool isFavorite;

  Product({
    this.id,
    required this.title,
    required this.description,
    required this.price,
    required this.imageUrl,
    this.isFavorite = false,
  });
...

了解更多关于null-safety

【讨论】:

  • 这解决了我的问题:final String? productId = ModalRoute.of(context)!.settings.arguments as String?;
  • 你做的和我在这里描述的一样,导航没有包含在问题中。
【解决方案2】:

以下更改解决了我的问题:

  1. 在 Product.dart 中将 final String id; 更改为 final String? id;
  2. final productId = ModalRoute.of(context)!.settings.arguments as String; 更改为final String? productId = ModalRoute.of(context)!.settings.arguments as String?;

【讨论】:

    猜你喜欢
    • 2019-12-23
    • 2021-09-28
    • 1970-01-01
    • 2019-11-20
    • 2019-06-01
    • 2021-01-19
    • 2021-06-12
    • 2022-08-22
    • 2018-12-02
    相关资源
    最近更新 更多