FutureBuilder snapshot Data does not return anything , Why?

不打扰是莪最后的温柔 提交于 2020-02-06 09:53:57

问题


Trying to get stored data by SharedPreferences But does not work ..

my main.dart :

  Widget build(BuildContext context) {
    return StreamProvider<User>.value(
      value: AuthService().user,
      child: FutureBuilder<String>(
        future: SaadConstants.setValueFromLocal('app_lang','ar'),
        builder: (BuildContext context, AsyncSnapshot<String> snapshot){
          return MaterialApp(
            debugShowCheckedModeBanner: false,
            home: Scaffold(
              body:Wrapper(),
            ),
          );
        }
      ),
    );
  }

my wrapper :

@override
  Widget build(BuildContext context) {

    final user = Provider.of<User>(context);
    if (user==null) {
      return FutureBuilder(
        future: SaadConstants.getValueFromLocal('app_lang'),
        builder: (BuildContext contect , AsyncSnapshot<String> snapshot){
          if (snapshot.hasData) {
            return Text('has data');
          }
          else return Text('None'); 
        }
      );
    }
    else{
      return Text('connect');
    }

it returns this widget : Text('None') ..

my setValue Function :

  static Future<String> setValueFromLocal(String key, String value) async { // Async func to handle Futures easier; or use Future.then
    SharedPreferences perfs = await SharedPreferences.getInstance();
    perfs.setString(key.toString(),value.toString());
  }

my getValue Function :


  static Future<String> getValueFromLocal(String key) async { // Async func to handle Futures easier; or use Future.then
    SharedPreferences perfs = await SharedPreferences.getInstance();
    return perfs.getString(key);
  }

回答1:


Try this,

return FutureBuilder(
    future: SaadConstants.getValueFromLocal('app_lang'),
    builder: (BuildContext contect, AsyncSnapshot<String> snapshot) {
      if (snapshot.connectionState == ConnectionState.waiting)
        return Center(child: CircularProgressIndicator());
      else if (snapshot.hasData)
        return Text("DATA: ${snapshot.data}");
      else if (snapshot.hasError)
        return Text("ERROR: ${snapshot.error}");
      else
        return Text('None');
    }
);

Your main.dart should also implement these conditions.

Widget build(BuildContext context) {
  return StreamProvider<User>.value(
    value: AuthService().user,
    child: MaterialApp(
      debugShowCheckedModeBanner: false,
      home: FutureBuilder<String>(
          future: SaadConstants.setValueFromLocal('app_lang', 'ar'),
          builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting)
              return Center(child: CircularProgressIndicator());
            else if (snapshot.hasError)
              return Text("ERROR: ${snapshot.error}");
            else
              return Scaffold(
                body: Wrapper(),
              );
          }
      ),
    ),
  );
}


来源:https://stackoverflow.com/questions/59738180/futurebuilder-snapshot-data-does-not-return-anything-why

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!