【问题标题】:Dart programming calling the method from another classDart 编程从另一个类调用方法
【发布时间】:2018-07-17 08:26:52
【问题描述】:

我在这里需要一些帮助,我正在尝试在另一个类中使用这个 getdetails.getuserid 方法,但我遇到了这样的错误 type 'Future<dynamic>' is not a subtype of type 'String'

class getdetails {
  Future<Null> getuserid() async {
    SharedPreferences pref = await SharedPreferences.getInstance();
    String userid = pref.getString('userid');
    return userid;
  }
}

如果我尝试如下调用,我会收到此错误Closure: () =&gt; dynamic from Function 'getuserid': static.() in dart

String getuserid() async {
    SharedPreferences pref = await SharedPreferences.getInstance();
    String userid = pref.getString('userid');
    return userid;
  }

【问题讨论】:

  • 哪一行导致这个错误?
  • 方法中的返回值

标签: dart flutter


【解决方案1】:

您需要将函数的返回类型定义为Future&lt;String&gt;

Future<String> getuserid() async {
 ....
}

【讨论】:

  • 它给了我这个 'Future' 而不是返回值
【解决方案2】:

删除 null 并在 Future 之后放置 String... 未来

【讨论】:

    【解决方案3】:

    那里有一些错误。 1. 在第一个代码示例中,您返回一个 null 未来,而您的代码返回一个字符串。这没有任何意义。 2. 在您的第二个代码示例中,您只返回一个字符串,而您的函数是一个异步函数,因此它的另一个错误甚至可能在您使用的任何 IDE 上显示给您。 像 -> 你需要返回一个 future 。所以应该是Future 如上一个答案所述。

    Future<String>
    
    1. 创建一个 String var 就说

      String userId = "";

    在你的班级里getdetails。 然后在您的函数getuserid() 中执行此操作,假设您在用于共享首选项的userid 键中已经有一些值。

    getuserid() async{
    SharedPreferences pref = await SharedPreferences.getInstance(); 
    String u = pref.getString('userid'); 
    userId = u ;
    }
    

    现在在同一个类中创建另一个函数只是为了让事情变得简单明了。

    String userdetails(){
    return userId;
    }
    

    现在在class/widget(stateful/stateless) 中您想要获取 userId 的位置:-

    像这样创建该类的对象

    getdetails g ; 
    

    现在调用这样创建的函数..

    g.getuserid().then((){
    String ID = g.userdetails();
    });
    

    我在这里做的是首先创建一个函数来获取您的值并将其存储到局部变量中,然后在从共享首选项类中检索到该值并将其存储到时调用另一个函数来获取该局部变量的值该局部变量使用相同的对象,即为什么我使用 .then((){}) 函数 我希望它有帮助。

    【讨论】:

      猜你喜欢
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多