我有這個登錄功能,它的作業原理和 charm 一樣,但是問題是用戶可以按下后退按鈕并回傳登錄螢屏,我想禁用它。
void _login() async {
setState(() {
_isLoading = true;
});
var data = {'email': email, 'password': password};
print("Data =" data.toString());
var res = await Network().authData(data, '/login');
var body = json.decode(res.body);
print(body);
if (body['success']) {
SharedPreferences localStorage = await SharedPreferences.getInstance();
localStorage.setString('access_token', json.encode(body['access_token']));
localStorage.setString('user', json.encode(body['user']));
if (body['user']['verified'] == 1) {
// OPEN THE HOME PAGE AND BLOCK THE BACK ACTION
Navigator.push(
context,
MaterialPageRoute(builder: (context) => HomeScreen()),
);
} else {
showAnimatedDialog(
context: context,
barrierDismissible: true,
builder: (BuildContext context) {
return AlertDialog(
backgroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
content: Container(
width: 100,
height: 50,
child:
Center(child: Text("Your account isn't verified yet!")),
));
},
animationType: DialogTransitionType.fadeScale,
curve: Curves.fastOutSlowIn,
duration: Duration(seconds: 1),
);
}
} else {
_showMsg(body['message']);
}
setState(() {
_isLoading = false;
});
}
另外,有沒有辦法讓他在登錄完成后關閉應用程式后也保持登錄狀態?(直到用戶按下注銷按鈕)。
uj5u.com熱心網友回復:
我有點想辦法做到這一點,我不知道這是否是好方法,但這確實有效。
scaffold像這樣包裝WillPopScope:
WillPopScope(
onWillPop: () async => false,
)
我從這里得到的
uj5u.com熱心網友回復:
首先:讓我們了解一下 Flutter Framework 中 Screen 的組織方式:
Flutter 中的螢屏以堆疊方式組織,因此如果您在螢屏 A上并推送螢屏 B,然后從螢屏 B推送螢屏 C,您的堆疊將如下所示:
按下螢屏 B后:
- 螢屏 A
- 畫面 B (當前畫面)
按下螢屏 C后:
- 螢屏 A
- 螢屏 B
- 畫面 C (當前畫面)
因此,假設Screen B是您的Login Screen,并且您想阻止用戶回傳,那么您不必只是將螢屏推送到堆疊中,而是應該將堆疊中的螢屏替換為您的主螢屏.
其次:現在了解了流程之后,我們來說說代碼:
在您的場景中,Navigator.push()您必須使用Navigator.pushReplacement()替換堆疊中的螢屏,而不是使用上面提到的。
彈跳: 如果你在一個場景中,需要將所有螢屏從堆疊中移除,只保留將被推送的螢屏,例如,如果你有一個多步驟的注冊流程,并且注冊成功后,你想要要從堆疊中彈出行程的所有螢屏并推送主螢屏,那么您可以使用以下技巧:
Navigator.popUntil((route) => route.isFirst);// 在推送螢屏之前執行它,以便在堆疊中只保留一個路由(螢屏)。
Navigator.pushReplacement();// 現在您將堆疊中的唯一螢屏替換為新螢屏,因此堆疊將只包含您想要的螢屏。
uj5u.com熱心網友回復:
這里首先需要檢查用戶是否經過身份驗證......
您必須將此條件檢查到材料應用程式的home :引數中。
if (snapShot.connectionState == ConnectionState.waiting) {
return const SplashScreen(); // If it's in waiting state it will show splash screen
}
if (snapShot.hasData) {
return const homeScreen(); // If user is authenticated it will show home screen
}
return const LoginScreen(); // If user is not authenticated then it will show login screen
在這里,snapShot 是關于用戶資料的。提前致謝。
uj5u.com熱心網友回復:
要阻止用戶回傳上一個螢屏,請嘗試使用Navigator.pushReplacement而不是 Navigator.push。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/467991.html
上一篇:顫振顯示對話框
