Define Interfaces and Share Class Members through Mixins in Dart
In this lesson, we will cover Interfaces and Mixins. Interfaces act as a contract containing properties and methods that a class must define once it “implements” this interface. Mixins are Dart’s way of sharing properties and methods from multiple classes, since by design Dart adopts a single-inheritance model.
Abstract class:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | void main() { var pixel = Phone( 'Pixel XL' , 'HTC' ); pixel.getDeviceInfo(); } abstract class Device { String name; String manufacturer; void getDeviceInfo(); } class Phone implements Device { String name; String manufacturer; void getDeviceInfo() => print( '' ' === Device name: $name Manufactured by : $manufacturer '' '); Phone( this .name, this .manufacturer); } |
Define a mixin:
mixin FeaturesMixin { bool blueTooth = true; bool dualSim = false; bool nfc = true; }
Extends a mixin:
// Extends FeaturesMixin mixin UtilitiesMixin on FeaturesMixin { bool calculator = true; bool flashlight = true; bool thermometer = false; String _has(bool feat) => feat ? 'Yes': 'No'; void getAllFeatures() => print(''' --FEATURES-- Bluetooth: ${_has(super.blueTooth)} Dual SIM: ${_has(super.dualSim)} NFC: ${_has(super.nfc)} Calculator: ${_has(calculator)} Flashlight: ${_has(flashlight)} Thermometer: ${_has(thermometer)} === '''); }
use Mixin:
class Phone with FeaturesMixin, UtilitiesMixin implements Device {
--
void main() { var pixel = Phone('Pixel XL', 'HTC'); pixel.getDeviceInfo(); pixel.getAllFeatures(); /* === Device name: Pixel XL Manufactured by: HTC --FEATURES-- Bluetooth: Yes Dual SIM: No NFC: Yes Calculator: Yes Flashlight: Yes Thermometer: No === */ } mixin FeaturesMixin { bool blueTooth = true; bool dualSim = false; bool nfc = true; } // Extends FeaturesMixin mixin UtilitiesMixin on FeaturesMixin { bool calculator = true; bool flashlight = true; bool thermometer = false; String _has(bool feat) => feat ? 'Yes': 'No'; void getAllFeatures() => print(''' --FEATURES-- Bluetooth: ${_has(super.blueTooth)} Dual SIM: ${_has(super.dualSim)} NFC: ${_has(super.nfc)} Calculator: ${_has(calculator)} Flashlight: ${_has(flashlight)} Thermometer: ${_has(thermometer)} === '''); } abstract class Device { String name; String manufacturer; void getDeviceInfo(); } class Phone with FeaturesMixin, UtilitiesMixin implements Device { String name; String manufacturer; void getDeviceInfo() => print(''' === Device name: $name Manufactured by: $manufacturer '''); Phone(this.name, this.manufacturer); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-08-25 [WebGL] Setting Up WebGL
2016-08-25 [Redux] Accessing Dispatch and State with Redux -- connect
2015-08-25 [Angular 2] 8. Better ES5 Code