Dart中的一些常用注解

目录

前言

1.@required

3.@protected

4.@mustCallSuper

5.@deprecated

6.@visibleForTesting

7.@immutable

8.@postFrameCallback

9.@nonVirtual

10.@factory


前言

        在 Flutter 中,Dart 提供了多种注解用于增强代码的表达能力,帮助编译器或分析工具理解代码结构,提升可读性和安全性。以下是 Flutter 中一些常用的 Dart 注解:

1.@required

        标识一个参数是必填的,用在函数或构造函数的命名参数中。当参数使用了 @required,如果调用时未传递该参数,分析器将发出警告。

import 'package:flutter/foundation.dart';

class CustomWidget extends StatelessWidget {
  final String title;

  CustomWidget({@required this.title});  // title 是必填参数
}

        注意:@required 已经被废弃,现在可以直接使用 Dart 语言自带的 required 关键字。2.@override

        用于重写父类方法,标识子类对父类方法进行了重写。@override 是一个编译器的提示,可以帮助检测是否正确重写了方法,避免拼写错误或方法签名不匹配。

class Parent {
  void greet() {
    print("Hello from Parent");
  }
}

class Child extends Parent {
  @override
  void greet() {
    print("Hello from Child");
  }
}

3.@protected

        标识一个方法或属性只能在其声明的类及子类中使用(类外不可见)。在 Flutter 的 State 类中常见,用于提示内部逻辑不应在外部使用。

import 'package:meta/meta.dart';

class BaseClass {
  @protected
  void protectedMethod() {
    print("This is a protected method");
  }
}

4.@mustCallSuper

        表示在重写方法时,子类必须调用父类的实现,否则 Dart 分析器会发出警告。常用于需要确保父类逻辑执行的情况,例如 initState、dispose 方法。

import 'package:meta/meta.dart';

class BaseClass {
  @mustCallSuper
  void performTask() {
    print("Performing task in BaseClass");
  }
}

class SubClass extends BaseClass {
  @override
  void performTask() {
    super.performTask();  // 必须调用 super.performTask()
    print("Performing task in SubClass");
  }
}

5.@deprecated

        标识某个方法或属性已被废弃,不再建议使用,并通常提供替代方案。被 @deprecated 标记的内容仍可以使用,但分析器会提示过时的警告。

class OldClass {
  @deprecated
  void oldMethod() {
    print("This method is deprecated");
  }
}

6.@visibleForTesting

        表示该成员的可见性仅用于测试,建议不要在生产代码中访问它。此注解通常用于将私有的属性或方法暴露给测试用例。

import 'package:meta/meta.dart';

class MyClass {
  @visibleForTesting
  final String debugName = "Test";
}

7.@immutable

        表示该类是不可变的,所有字段都应该是 final。在 Flutter 中,Widget 类使用了 @immutable,表明 Widget 类应该是不可变的,不能修改。

import 'package:meta/meta.dart';

@immutable
class ImmutableClass {
  final int value;

  ImmutableClass(this.value);
}

8.@postFrameCallback

        不是一个 Dart 的内置注解,但在 Flutter 中,开发者可以通过 WidgetsBinding.instance.addPostFrameCallback 访问 Flutter 框架的 postFrameCallback,用于在 Widget 构建结束后执行回调,常用于布局完成后执行特定操作。

WidgetsBinding.instance.addPostFrameCallback((_) {
  // 在构建帧完成后执行
});

9.@nonVirtual

        表示某个成员不应被重写,通常用于框架中的类或方法,防止子类更改父类的逻辑。

import 'package:meta/meta.dart';

class BaseClass {
  @nonVirtual
  void stableMethod() {
    print("This method should not be overridden.");
  }
}

10.@factory

        表示一个方法返回一个新的实例(工厂方法),而不是已有实例的引用,用于提醒该方法会生成新对象,避免直接修改原对象。

import 'package:meta/meta.dart';

class BaseClass {
  @nonVirtual
  void stableMethod() {
    print("This method should not be overridden.");
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫柱子哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值