【问题标题】:How to get the value of a var of another file in flutter?如何在flutter中获取另一个文件的var值?
【发布时间】:2020-10-15 17:22:21
【问题描述】:

我试图在颤动的不同文件中获取 var 的 val,我试图做这样的事情:New x = New(); 'New is my class', x.variable = ...

这对我不起作用。有什么想法可以让我做这样的事情吗?

import 'auth/LoginPage.dart' as login;

class WelcomePage extends StatefulWidget {
  @override
  _WelcomePageState createState() => _WelcomePageState();
}

class _WelcomePageState extends State<WelcomePage> {
  final PageController _pageController = PageController();
  var x = login.userType;

【问题讨论】:

  • 尝试将其设为文件中的全局变量。
  • 我该怎么做

标签: flutter var


【解决方案1】:

只需创建一个库文件并为您需要的全局变量创建字段。在您需要访问这些字段的任何地方导入此库。

app.dart

import 'globals.dart' as globals;

main() {
globals.isLoggedIn = true;
}

component1.dart

import 'globals.dart' as globals;

class MyComponent {
 view() {
if(globals.isLoggedIn) {
  doSomething();
else {
  doSomethingElse();
}
}
}

globals.dart

library my_prj.globals;

bool isLoggedIn = false;

【讨论】:

  • 我按照你说的做了,但它给了我这个错误:'名称'userType'是通过前缀'loginpage'引用的,但它没有在使用它导入的任何库中定义字首。尝试更正前缀或导入定义“userType”的库。 '
  • 我知道有一种推送方式,但我对此感到困惑??
  • 你能分享一些你所做的代码,以便我检查并帮助你吗?谢谢..!!
【解决方案2】:

因此,您需要创建一个文件 login.dart,从中导入这样的方法:

//login.dart

enum UserType { Firebase, Google, Twitter }

getUserTypeFirebase() {
  return UserType.Firebase;
}

getUserTypeGoogle() {
  return UserType.Google;
}

getUserTypeTwitter() {
  return UserType.Twitter;
}

然后您使用library 语句和export 语句创建库login_lib.dart,以从该库中导出您想要使用的其他文件或包。在这种情况下,我们导出文件 login.dart,如下所述。

//login_lib.dart

library login;

export 'login.dart';

然后你可以像这样在你想要的类中导入 login_lib:

//welcome_page.dart

import 'package:flutter/material.dart';
import 'login_lib.dart' as login;

class WelcomePage extends StatelessWidget {
  var x = login.getUserTypeGoogle();

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

【讨论】:

  • 嘿,这里可以使用共享偏好吗?
  • 在问题中添加了一些代码之后,我认为您可能需要在类中添加一个export 语句,您可以从中获取一些变量/方法。我相信这些帖子中的讨论可能是您所需要的:stackoverflow.com/questions/44480039/…stackoverflow.com/questions/27763378/…
  • 但是我怎么能在这里使用导出,因为我没有这方面的经验:(
  • 我不知道你到底想做什么。根据您要实现的目标,也许还有其他方法,实现起来可能非常简单。但我编辑了我的答案。看看是否能解决您的问题。
【解决方案3】:

我想出了如何进行自动登录,但是当我尝试时它给出了一个错误,有什么问题吗?代码:

    @override
  void initState() {
    super.initState();
    FirebaseAuth.instance.currentUser().then(
      (res) async {
        print(userType);
        if (res != null && userType == 'Admin') {
          Navigator.pushReplacementNamed(context, '/AdminPage');
        }
        if (res != null && userType == 'Student') {
          Navigator.pushReplacementNamed(context, '/StudentPage');
        }
        if (res != null && userType == 'Teacher') {
          Navigator.pushReplacementNamed(context, '/TeacherPage');
        }

它说 userType 是 null,所以我的新问题是关于在 initState 之外使用 var 的能力?糊涂了吧?

【讨论】:

    【解决方案4】:

    我想要的值来自的文件:

    importme.dart

    • 从扩展部分中删除 _...
    • 将变量设为静态 ..

    类 MultiSelectChip 扩展 StatefulWidget { 最终列表 报告清单; final Function(List) onSelectionChanged;

    _MultiSelectChip(this.reportList,{必需 this.onSelectionChanged});

    @override **_**MultiSelectChipState createState() => 多选芯片状态(); }

    _MultiSelectChipState 扩展 State {
    静态 List selectedChoices = [];

    ma​​infile.dart

    导入'package:ytsubmeapp/widgets/multichoice.dart';

    列表 x = MultiSelectChipState.selectedChoices;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      相关资源
      最近更新 更多