96SEO 2026-06-07 05:23 2
先说说抽象类到底是个啥
说实话,刚接触 Dart 的时候,我也懵逼了。
抽象类就是那种不Neng直接实例化的类,专门用来给子类抛个框架。

比如我们想统一所有动物的叫声,那就把makeSound声明成抽象方法。
哈哈,这里有段代码,别急,先kankan:
// 抽象类:定义动物规范
abstract class Animal {
// 成员变量
String name;
// 构造函数
Animal;
// 抽象方法
void makeSound;
// 普通方法
void eat {
print;
}
}
// 子类继承抽象类
class Dog extends Animal {
// 调用父类构造
Dog : super;
// 必须实现抽象方法
@override
void makeSound {
print;
}
}
void main {
// Animal; ❌ 抽象类不Neng实例化
final dog = Dog;
dog.makeSound; // Woof!
dog.eat; // Buddy is eating
}
不对不对,这段代码里我用了print,其实在 Flutter UI 上你会用debugPrint或者直接在 widget 树里展示。
抽象类帮你把“必须实现的东西”强制下来。
再聊聊接口——Dart 没有专门的 interface关键字你可Neng听说过 Java 那套interface,但在 Dart 世界里一切dou是 class。
咱就是说用abstract class或者普通classdouNeng当接口用。
关键点是:实现时你得把所有成员全部写出来。
下面给你整段例子:
abstract class Flyable {
void fly;
}
class Bird implements Flyable {
@override
void fly {
print;
}
}
class Airplane implements Flyable {
@override
void fly {
print;
}
}
kan见没?Bird 和 Airplane dou各自实现了fly,而没有继承任何实现细节。
Ru果你想要一个既Neng飞又Neng潜水的玩意儿,只要再加个Sailable接口,然后
其实你甚至Ke以直接用普通的 concrete class 当接口。
Dart 官方建议:Ru果只需要规范,不需要提供默认实现,就用 abstract class;Ru果想顺手提供点默认行为,那就直接写普通 class 再让别人 implements 它。
Mixin——横向复用代码的神器Aha!这就是大家经常提到的“mix in”。
Mixin 本质上是一段Ke以被多个类“混进去”的代码块。
C++ 那套多继承在 Dart 被玩成了单继承 + mixin,简直是设计师们的福音。
Mixin 定义hen简单,用mixin MyMixin { … }
P.S. 用 on 限制只Neng给特定基类混入,这点hen重要,别忘了。
mixin Logger {
void log {
print;
}
}
class UserService with Logger {
void createUser {
log;
// ...其他业务逻辑
}
}
Aha,这里 UserService 并没有显式地继承 Logger,而是通过 with 把 log 方法塞进来了。
Mixin 冲突处理——谁抢到了就谁上位害,你可Neng会问:“Ru果两个 mixin dou有同名方法,会咋办?”
mixin A {
void run => print;
}
mixin B {
void run => print;
}
class C with A, B {}
void main => C.run; // 打印 B,因为 B 在后面
所以写 mixin 时尽量避免同名冲突,要不然调试的时候会抓狂。
Dart 单继承 + 多 Mixin 的组合拳——Flutter 实战演示Coding 时我经常遇到这样的问题:
页面需要统一的状态管理逻辑。
Lottie 动画又想随处可用,却不想每个页面dou写一遍代码。
SplashScreen 想复用导航动画,又要保留各自页面独有的 UI 布局。
Crap,这种需求往往让人抓耳挠腮。好在我们Ke以把共通功Neng抽成 mixin,把页面基类抽成 abstract class,然后各自实现自己的 UI。下面来一段实际项目里的骨架:
abstract class BasePage extends StatefulWidget {
const BasePage : super;
@override
BasePageState createState;
}
// 把状态管理放进 mixin,让任何页面douNeng拿到
mixin LoadingMixin on State{
bool _isLoading = false;
void showLoading => setState => _isLoading = true);
void hideLoading => setState => _isLoading = false);
Widget buildLoadingOverlay => _isLoading
? Center)
: SizedBox.shrink;
}
// 真正的页面 State 实现
class HomePage extends BasePage {
const HomePage : super;
@override
_HomePageState createState => _HomePageState;
}
class _HomePageState extends State
with LoadingMixin{
@override
Widget build {
return Scaffold(
appBar: AppBar),
body: Stack(
children: ,
),
floatingActionButton: FloatingActionButton(
onPressed: async{
showLoading;
await Future.delayed);
hideLoading;
},
child: Icon,
),
);
}
}
You get it? 我们把加载指示器封装进一个 mixin,然后任何页面只要加上它,就自动拥有 show/hide 方法和 overlay UI。咱就是说这样写既干净又可维护。
Mixer 与 abstract 的配合技巧
Mixer 不带构造函数:只Neng放方法和属性,不Neng像普通类那样接受参数。所以Ru果你需要传递配置,用 mixin + getter 或者在使用方自行传参。
Mixer Ke以约束基类:
例如 mixin ValidationMixin on FormFieldState, 那么只有继承自 FormFieldState 的子类才Neng混入 ValidationMixin。这点在表单校验时超实用。
Mixer Ke以与 abstract 同时使用: 我们Ke以先定义一个抽象基类提供必需的方法签名,再让 mixin 提供默认实现,让子类只关心业务逻辑。例如:
abstract class CacheProvider{
String get cacheKey;
Future readCache;
}
mixin JsonCacheMixin on CacheProvider{
@override
Future readCache async{
final data = await rootBundle.loadString;
return data;
}
}
class UserCache extends CacheProvider with JsonCacheMixin{
@override String get cacheKey => 'user';
}
# 小结 —— 怎么选?什么时候该抽象、什么时候该接口、什么时候该 mixin?
抽象类:
- 想要提供部分默认实现,同时强制子类补全缺口;
- 项目里常见于 BaseWidget、BaseBloc 等基底结构;
接口:
- 完全没有实现,只是约定一堆方法/属性;
- 多个不相关类型想共享同一套 API 时用它Zui干净;
Mixin:
- 横向复用代码块;
- 想把某些行为“粘贴”到多个 unrelated 类上;
- 注意冲突顺序和 on 限制,否则容易踩坑。
# 一点个人小经验分享Aha,我曾经把所有业务dou塞进一个巨大的 abstract BaseRepository,然后每个具体 repo 又去混入 Logger 和 RetryMixin……结果后来发现太臃肿,于是把 Logger 拆出来单独 implements,一个文件搞得乱七八糟。哈哈,现在我geng倾向于 “每个职责一份文件”,尽量让 mixin 保持轻量级,不要背负太多状态变量。懂吗?你懂的,就是那种“一眼kan过去就知道干嘛”的感觉。
P.S. Ru果你真的不知道该选哪个,就先问自己两个问题:
"我需要默认实现吗?" → Yes → 用 abstract;
"我只是想约定 API 吗?" → Yes → 用 implements;
"我想把某段功Neng复制粘贴到hen多地方吗?" → Yes → 用 mixin。
# 小彩蛋 —— 快速记忆口诀
The End.
©2026 Flutter 小伙伴们分享的一杯咖啡时光。不保证完整性,仅供学习交流使用~ 😊.作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback