Dart编程从另一个类调用该方法

时间:2018-07-17 08:26:53

标签: dart flutter

在这里我需要一些帮助,我正在另一个类中尝试使用此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: () => dynamic from Function 'getuserid': static.() in dart

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

3 个答案:

答案 0 :(得分:1)

您需要将函数的返回类型定义为Future<String>

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

答案 1 :(得分:0)

删除null并将字符串放在Future之后... 未来

答案 2 :(得分:0)

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

Future<String>
  1. 创建一个字符串变量,只需说

    String userId =“”;

在课堂上获取详细信息。 然后假设您已经在getuserid()键中使用了一些用于共享首选项的值,就可以在函数userid中进行此操作。

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

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

String userdetails(){
return userId;
}

现在在您要获取用户ID的class/widget(stateful/stateless)中,请执行以下操作:-

像这样创建该类的对象

getdetails g ; 

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

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

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

相关问题