Saya memiliki kode untuk mendapatkan nama pengguna yang masuk saat ini dan menyimpannya ke preferensi bersama. Masalah yang saya hadapi adalah setiap kali pengguna masuk untuk pertama kalinya, nama pengguna tidak pernah ditampilkan, tetapi ketika saya memuat ulang aplikasi, nama pengguna ditampilkan di layar. Bagaimana saya bisa memilikinya sedemikian rupa sehingga nama pengguna dimuat pada pemuatan pertama tanpa melakukan hot reload.

Bagaimana cara mendapatkan nama pengguna di 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;
    }
  }

Navigasi saya ke NavScreen -> dialihkan ke layar Utama

 /// 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
    }
  }

Bagaimana saya mendapatkan nama pengguna untuk ditampilkan di layar beranda dan menunjukkan nama pengguna

 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;
  }
0
blackbird 20 November 2020, 05:10

1 menjawab

Jawaban Terbaik

Karena getName() adalah metode async, Anda harus memanggil setState((){}) setelah nama pengguna didapat.

void getName() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  username = prefs.getString("username");
  setState((){});
}
1
zhpoo 20 November 2020, 02:22