#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');