如何在 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');
我有这个代码来获取应该从登录屏幕传递的访问令牌 -> 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');