如何在颤动中加载存储在SharedPreference中的数据

How to load data stored in SharedPreference in flutter

我有一个获取当前登录用户名并将其保存到共享首选项的代码。面临的问题是,每当用户第一次登录时,用户名永远不会显示,但是当我在应用程序上进行热重载时,用户名会显示在屏幕上。我怎样才能以这种方式在第一次加载时加载用户名而不进行热重载。

如何获取 SharedPreference 上的用户名

/// Gets the current and prior accounts.
  Future<dynamic> handleGetAccount() async { // <-- Replace dynamic with type of currentAccount

    final result = await msal.getAccount();
    if (result.currentAccount != null) {
      SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
      sharedPreferences.setString("username", result.currentAccount.username);
      //print(result.currentAccount.username);
      return result.currentAccount;

    } else {
      print('no account found');
      return null;
    }
  }

我导航到 NavScreen -> 重定向到主屏幕

 /// Updates the signed in state

  refreshSignedInStatus() async {
    bool loggedIn = await msal.getSignedIn();
    if (loggedIn) {
      isSignedIn = loggedIn;
      if(isSignedIn) {
        Navigator.of(context).push(
          MaterialPageRoute(
            builder: (context) => NavScreen(
            ),
          ),
        );
      }
      // Remaining code for navigation
    }
  }

我如何让用户名显示在主屏幕上并显示用户名

 class Home extends StatefulWidget {
  const Home({Key key}) : super(key: key);

  @override
  HomeState createState() => new HomeState();
}

class HomeState extends State<Home> {
  final TrackingScrollController _trackingScrollController =
      TrackingScrollController();
  String username = "";

  @override
  void initState() {
    getName();
  }

  Future<String> getName() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    username = prefs.getString("username");
    return username;
  }

因为 getName() 是一个异步方法,你应该在获取用户名后调用 setState((){})

void getName() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  username = prefs.getString("username");
  setState((){});
}