如何在 flutter 中传递访问令牌值

How to pass access token value in flutter

我有这个代码来获取应该从登录屏幕传递的访问令牌 -> navscreen -> homescreen-> griddashboard->forms ->add new post 并将 post 请求发送到带有令牌的服务器

这是我获得令牌的方式

 Future<dynamic> handleGetTokenSilently() async {
    String authority = "https://login.microsoftonline.com/$TENANT_ID";
    final  result = await msal.acquireTokenSilent([SCOPE], authority);
    if(result !=null){
      print('access token (truncated): ${result.accessToken}');
      return result; //passing the result
    }
    else{
      print('no access token');
      return null;
    }
  }

然后将其传递给 Navscreen

refreshSignedInStatus() async {
    bool loggedIn = await msal.getSignedIn();
    if (loggedIn) {
      isSignedIn = loggedIn;
      if(isSignedIn) {
        dynamic data = await handleGetAccount();
        dynamic token = await handleGetTokenSilently();
        dynamic currentAccount = data;
        dynamic result = token; <--- getting the token
        Navigator.of(context).pushReplacement(
          MaterialPageRoute(
            builder: (context) => NavScreen(
              currentAccount : currentAccount, // <--- Passing required named parameter "currentAccount" in NavScreen widget.
              result: result, <-- Passing required named parameter "result" in NavScreen widget
            ),
          ),
        );
      }
      // Remaining code for navigation
    }
  }

然后传递到主屏幕

class NavScreen extends StatefulWidget {
  const NavScreen({Key key, @required this.currentAccount, @required this.result}) : super(key: key);

  @override
  _NavScreenState createState() => _NavScreenState();
  final dynamic currentAccount;
  final dynamic result;
}

class _NavScreenState extends State<NavScreen> {
  final List<Widget> _screens = [];

  @override
  void initState() {
    _screens.add(Home(currentAccount: widget.currentAccount));
    _screens.add(Home(result: widget.result));

然后在主屏幕上我有一个 gridview,可以选择转到不同的页面。

如何调用 gridview

 SizedBox(
          height: 20,
        ),
        GridDashboard()
      ],

然后在 Griddashboard 上

     class _GridDashboardState extends State<GridDashboard> {
  Items home = new Items(screen: Home());

  Items update = new Items(screen: CameraExampleHome());

  Items bluetooth = new Items(screen: BluetoothApp());

  Items forms = new Items(screen: FormsDashboard());

  Items supervisor = new Items(screen: Home());

  Items messages = new Items(screen: Home());

  Items settings = new Items(screen: Settings());

  Items check = new Items(screen: Home());

  Items logout = new Items(screen: AudioRecorder());

如何将令牌从主屏幕传递到 Griddashboard 到 FormsDashboard() 并将 post 值传递给带有令牌的服务器?

如果您想要在整个应用程序中定义全局变量,请尝试定义全局变量,但一旦用户关闭应用程序,它就会丢失。

最好的方法是将该令牌值存储在数据库中,例如 shared_preferences 或 'hive` 。这是 https://pub.dev/packages/shared_preferences and https://pub.dev/packages/hive resp

的文档
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('token', tokenvalue);

获取布尔值

bool counter = prefs.getString('token');