【问题标题】:How to assign value to a variable inside factory constructor without making it static?如何在工厂构造函数中为变量赋值而不使其成为静态变量?
【发布时间】:2020-04-02 15:51:11
【问题描述】:
class Product {
  final int id;
  final String name;

  // this is given value at some later stage
  String downloadUrl;

  Product(
    this.id,
    this.name,
  );

  factory Product.fromMap(Map data) {

    // how to assign value to downloadUrl without making it static
    downloadUrl = data["downloadUrl"]; // error

    return Product(
      data['id'],
      data['name'],
    );
  }
}

我在创建Product 时给出idname,但是,我也有downloadUrl 字段,稍后将被赋予值。

问题:

在工厂构造函数中,当我得到data 时,我还需要初始化downloadUrl 字段,但我不能在工厂构造函数中这样做,因为我需要将downloadUrl 设为静态,但这超出了我的目的。然后如何从data 为其赋值?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:
      factory Product.fromMap(Map data) {
        return Product(
          data['id'],
          data['name'],
        )..downloadUrl = data["downloadUrl"];
      }
    

    【讨论】:

    • 太棒了,了不起的工作
    【解决方案2】:

    downloadUrl 添加到您的构造函数中。

    你可以在Dartpad试试这个

    class Product {
      final int id;
      final String name;
      String downloadUrl;
    
      Product(
        this.id,
        this.name,
        this.downloadUrl,
      );
    
      factory Product.fromMap(Map data) {   
        return Product(
          data['id'],
          data['name'],
          null, 
        );
      }
    }
    
    
    void main() {
    
      Product _product = Product(1, 'abc', null);
      _product.downloadUrl = 'https://flutter.dev/';
      print(_product.downloadUrl);
    
    }
    

    【讨论】:

    • 我想你误解了这个问题,请再读一遍。
    【解决方案3】:

    我认为我可以删除工厂构造函数并将其改为方法。喜欢:

    Product fromMap(Map data) {
      downloadUrl = data["downloadUrl"]; // works
    
      return Product(
        data['id'],
        data['name'],
      );
    }
    

    这似乎是一种解决方法,我仍然很乐意接受其他人的回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-03
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多