1. /// 传统的面向对象写法 单继承
    2. class Item {
    3. double price;
    4. String name;
    5. Item(name, price) {
    6. this.name = name;
    7. this.price = price;
    8. }
    9. }
    10. class ShoppingCart {
    11. String name;
    12. DateTime date;
    13. String code;
    14. List<Item> bookings;
    15. ShoppingCart(name, code) {
    16. this.name = name;
    17. this.code = code;
    18. this.date = DateTime.now();
    19. }
    20. price() {
    21. double sum = 0.0;
    22. for (var i in bookings) {
    23. sum += i.price;
    24. }
    25. return sum;
    26. }
    27. getInfo() {
    28. return '购物车信息:' +
    29. '\n----------------------' +
    30. '\n 用户名:' + name +
    31. '\n 优惠码:' + code +
    32. '\n 总价:' + price().toString() +
    33. '\n 日期:' + date.toString() +
    34. '\n---------------------';
    35. }
    36. }
    37. main() {
    38. ShoppingCart sc = ShoppingCart("张三", '123456');
    39. sc.bookings = [Item("aa", 10.0), Item("bb", 20.0)];
    40. print(sc.getInfo());
    41. }

    通过重构修改了上面的代码,用到了许多dart才有的特性
    1、简化构造过程,构造函数简写
    2、命名构造函数,一个类可以有多个构造函数
    3、构造时初始化额外参数,super前初始化
    4、简单成员函数用get或者set关键字改造
    5、a??b运算符替代三元运算符
    6、重载类的+(加号)运算符
    7、连级运算符

    1. abstract class PrintHelper {
    2. printInfo() => print(getInfo());
    3. getInfo();
    4. }
    5. class Meta {
    6. double price;
    7. String name;
    8. Meta(this.name, this.price);
    9. }
    10. class Item extends Meta {
    11. Item(name, price) : super(name, price);
    12. Item operator +(Item item) => Item(name + item.name, price + item.price);
    13. }
    14. class ShoppingCart extends Meta with PrintHelper {
    15. DateTime date;
    16. String code;
    17. List<Item> bookings;
    18. ShoppingCart({name}) : this.withCode(name: name, code: null);
    19. ShoppingCart.withCode({name, this.code})
    20. : date = DateTime.now(),
    21. super(name, 0);
    22. double get price => bookings.reduce((value, element) => value + element).price;
    23. getInfo() => '''
    24. 购物车信息:
    25. ---------------------
    26. 用户名:$name
    27. 优惠码:${code ?? ''}
    28. 总价:$price
    29. 日期:$date
    30. ---------------------
    31. ''';
    32. }
    33. main() {
    34. ShoppingCart.withCode(name: "张三", code: '123456')
    35. ..bookings = [Item("aa", 10.0), Item("bb", 20.0)]
    36. ..printInfo();
    37. }