flutter如何实现setter方法

在Flutter中,如何为类的属性实现setter方法?我尝试使用set关键字,但不确定如何正确使用它来控制属性的赋值逻辑。比如,如何在赋值时添加验证条件或触发其他操作?能否提供一个具体的代码示例?

2 回复

在Dart中,使用set关键字定义setter方法。例如:

class MyClass {
  String _name;
  
  set name(String value) {
    _name = value;
  }
}

调用时直接赋值:obj.name = "新值"

更多关于flutter如何实现setter方法的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,实现setter方法主要有以下几种方式:

1. 使用set关键字创建setter方法

class MyClass {
  String _name = '';
  
  // setter方法
  set name(String value) {
    _name = value;
    print('名字被设置为: $value');
  }
  
  // getter方法(可选)
  String get name => _name;
}

// 使用
void main() {
  var obj = MyClass();
  obj.name = '张三'; // 调用setter
  print(obj.name);  // 调用getter
}

2. 在StatefulWidget中使用setter

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  String _text = '';
  
  set text(String value) {
    setState(() {
      _text = value;
    });
  }
  
  @override
  Widget build(BuildContext context) {
    return Text(_text);
  }
}

3. 使用ValueNotifier实现响应式setter

class MyModel {
  final ValueNotifier<String> _name = ValueNotifier('');
  
  set name(String value) {
    _name.value = value;
  }
  
  String get name => _name.value;
  
  ValueNotifier<String> get nameNotifier => _name;
}

4. 带验证的setter

class User {
  int _age = 0;
  
  set age(int value) {
    if (value < 0 || value > 150) {
      throw ArgumentError('年龄必须在0-150之间');
    }
    _age = value;
  }
  
  int get age => _age;
}

setter方法的主要用途:

  • 数据验证
  • 触发副作用(如通知监听器)
  • 计算属性
  • 状态管理

选择哪种方式取决于你的具体需求:简单的数据封装用基础setter,UI更新用setState,响应式编程用ValueNotifier。

回到顶部