You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中创建Question类?请排查该代码的问题

在Flutter中创建Question类的方法及代码问题分析

一、创建Question类的合理方式

在Dart(Flutter基于Dart)中,创建Question类可以遵循以下几种更简洁、符合最佳实践的写法:

1. 简洁构造函数写法

利用Dart语法糖,直接在构造函数参数前加this.完成成员变量初始化,避免冗余赋值代码:

class Question {
  String questionText;
  bool questionAnswer;

  // 简洁构造函数,直接初始化成员
  Question(this.questionText, this.questionAnswer);
}

2. 不可变类写法(推荐)

如果Question实例创建后无需修改内容,建议用final修饰成员变量,让类成为不可变类,这在Flutter状态管理中更安全:

class Question {
  final String questionText;
  final bool questionAnswer;

  Question(this.questionText, this.questionAnswer);
}

3. 空安全兼容写法(Dart 2.12+)

针对Dart空安全特性,可根据需求明确处理参数的非空或可空性:

// 强制参数非空(保障数据完整性)
class Question {
  final String questionText;
  final bool questionAnswer;

  // 使用required标注必填参数
  Question({required this.questionText, required this.questionAnswer});
}

// 允许参数为空
class Question {
  final String? questionText;
  final bool? questionAnswer;

  Question(this.questionText, this.questionAnswer);
}

二、你提供的代码存在的问题

这段代码能正常运行,但不符合Dart最佳实践,存在以下可优化点:

  • 构造函数冗余:手动在构造函数体内给成员变量赋值完全没必要,Dart支持通过this.语法直接在构造函数参数中完成初始化,代码更简洁。
  • 缺乏不可变性保障:成员变量未用final修饰,创建实例后外部可随意修改questionText或questionAnswer的值,容易引发意外的状态变化,在Flutter Widget树中,不可变数据更利于状态管理和性能优化。
  • 空安全处理缺失:在Dart 2.12及以上版本(Flutter默认使用),若未标注成员变量为可空类型(如String?),构造函数参数必须确保非空,但你的代码未显式处理这一点,比如没有用required标注参数,也未处理潜在的null传入风险,在严格空安全模式下可能出现问题。

内容的提问来源于stack exchange,提问作者عمر محمود

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:57:13