Как передать значение токена доступа в flutter

#flutter #dart #bearer-token

#flutter #dart #токен на предъявителя

Вопрос:

У меня есть эти коды для получения токена доступа, который должен передаваться с экрана входа -> navscreen -> homescreen-> griddashboard-> forms -> добавить новую запись и отправить запрос 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 resu< //passing the result
    }
    else{
      print('no access token');
      return null;
    }
  }
  

а затем передать его на навигационный экран

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

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() и отправлять значения на сервер с помощью токена?

Ответ №1:

попробуйте определить глобальные переменные, если вы хотите, чтобы это было во всем приложении, но оно будет потеряно, как только пользователь закроет приложение.

лучший способ — сохранить это значение токена в базе данных, например shared_preferences или ‘hive` . Вот документ https://pub.dev/packages/shared_preferences и https://pub.dev/packages/hive соотв

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

для получения значения bool

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