shared_preferences对现有值返回null

问题描述 投票:0回答:2

我正在尝试查看我的应用的shared_pereferences中是否有可用的ID密钥,如果有,请将我的用户重定向到主页。我在main.dart的initState()函数中检查Id,我知道id存在,因为我可以在其他页面中获取它。但在我的main.dart中它返回null。有任何想法吗?这是我的main.dart代码:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import './ui/pages/auth/auth_one.dart';
import './ui/pages/main_page.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  SystemChrome.setPreferredOrientations(
          [DeviceOrientation.portraitDown, DeviceOrientation.portraitUp])
      .then((_) => runApp(MyApp()));
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String userId;
  @override
  void initState() {
    _getUserId().then((id) => userId = id);

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    print(userId);
    return MaterialApp(
      theme: ThemeData(primarySwatch: Colors.deepPurple),
      debugShowCheckedModeBanner: false,
      home: userId == null ? AuthOne() : MainPage(),
    );
  }

  _getUserId() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var id = prefs.getString('id');
    return id;
  }
}
flutter sharedpreferences
2个回答
1
投票

您的_getUserId方法是异步的,因此您必须在获得结果后刷新小部件。

用这个:

         @override
          void initState() {
            _getUserId().then((id) { 
              //calling setState will refresh your build method.
              setState(() {
                userId = id;
              });
            });
            super.initState();
          }

1
投票

发生这种情况是因为您尝试在计算之前使用该值。

你可以使用计时器功能来延迟

© www.soinside.com 2019 - 2024. All rights reserved.