FutureBuilder快照数据不返回任何内容,为什么? [英] FutureBuilder snapshot Data does not return anything , Why?

查看:195
本文介绍了FutureBuilder快照数据不返回任何内容,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

试图通过SharedPreferences获取存储的数据,但是不起作用..

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

我的main.dart:

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(),
            ),
          );
        }
      ),
    );
  }

我的包装器:

@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');
    }

它返回此小部件:Text('None')..

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

我的setValue函数:

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());
  }

我的getValue函数:

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);
  }

推荐答案

尝试一下,

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');
    }
);

您的main.dart也应满足这些条件.

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(),
              );
          }
      ),
    ),
  );
}

这篇关于FutureBuilder快照数据不返回任何内容,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆