当前位置: 首页 > 知识库问答 >
问题:

在颤振飞镖中创建和使用单体

缑赤岩
2023-03-14

我对flutter和dart非常陌生,正在尝试使用全局状态的单例实例(?).这是从后端服务器获得的公司信息。当flutter app启动时,向服务器发送请求并获得响应,然后基于响应构建一个singleton实例。所以我创造了阶级

class Company {
  static final Company _instance = new Company._internal();

  factory Company() {
    return _instance;
  }

  @protected
  String name;
  @protected
  String intro;

  String get companyName => name;
  String get companyIntro => intro;

  void setCompany(String name, String intro) {
    name = name;
    intro = intro;
  }

  Company._internal();
}

在main.dart中

// companyResult is the response from server
final String companyName = companyResult["name"];
final String companyIntro = companyResult["intro"];

// create singleton instance
var company = Company();
// set company info
company.setCompany(companyName, companyIntro);

// cheking
print(company.companyName)

prints null

我做错了什么?

共有1个答案

子车青青
2023-03-14

最好避免单例,我建议您改用Provider并在小部件树上注入一个简单的对象引用,这样您就可以随时获取该引用。

您的示例打印< code>null的原因是,您错误地引用了< code>setCompany()上的变量,变量< code>name和< code>intro都是同一个变量,您更改的是函数内部的变量,而不是类变量,为了解决这个问题,请将其更改为:

void setCompany(String name, String intro) {
  this.name = name;
  this.intro = intro;
}

此外,我建议您将变量命名为< code>_name和< code>_intro,因为对一个非私有变量使用< code>get是没有意义的。

 类似资料:
  • 在flutter示例页面中,有一个名为“将数据发送到新屏幕”的项目。我对第65行的构造函数有一个重新保护的问题。

  • 我已经在我的服务器上创建了一个RSA密钥对,只有服务器才会有私钥。客户端(Flatter应用程序)将访问公钥。因此,当服务器收到加密消息时,它将知道消息来自正确的客户端,并将使用其私钥解密通过公钥加密的消息。 当服务器(php7.3)向客户端发送回复时,我想在服务器端通过私钥加密消息,以便客户端可以用公钥解密消息。 非对称加密有其自身的局限性,如最大字符长度。但如果能送来就好了 Flutter包加

  • [![Plugins installed][1][1]我已经在android studio中安装了这些插件,并将C:\flatter\bin添加到系统环境变量中,但当我在PowerShell中运行flatter doctor时,它显示这些插件没有安装。我用的是Windows操作系统。

  • 我试图改变从API返回的日期字符串的格式。下面的日期格式输入字符串在java中工作正常,但在Dart中则不行。

  • 我正在看YouTube的Flutter教程。我来到了Firebase部分。然而,我在这部分得到了一个错误。我得到一个错误,即使我键入相同的。我想我得到了这样一个错误,因为有Flutter语言的更新。对不起,我的英语不好。提前谢谢你帮助我。 错误图像: 主要的飞奔 signup_screen.dart