我制作了自己的启动画面,其中有一个名为 _navigate
的函数,它决定用户应导航到下一个主屏幕或身份验证屏幕的位置。
问题是它在调试模式下工作正常,导航根据指定的条件正确进行,但在发布模式下它卡住了,根本不导航。
代码如下:
class _SplashScreenState extends State<SplashScreen> {
bool _firstTime = true;
Future<void> _navigate(BuildContext context) async {
bool _isLoggedIn = await Provider.of<Info>(context, listen: false).token();
if (_isLoggedIn) {
final _prefs = await SharedPreferences.getInstance();
User _user = User(
id: _prefs.getString("id"),
name: _prefs.getString("name"),
phoneNumber: _prefs.getInt("phoneNumber"),
);
Provider.of<Info>(context, listen: false).setUser(user: _user);
Navigator.of(context).pushReplacementNamed(HomeScreen.routeName);
} else {
Navigator.of(context).pushReplacementNamed(AuthScreen.routeName);
}
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (_firstTime) {
_navigate(context);
_firstTime = false;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.lightGreen,
body: Center(
child: Container(
padding: EdgeInsets.all(25),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.white,
border: Border.all(
color: Colors.lightGreen,
),
),
clipBehavior: Clip.hardEdge,
child: Image(
height: 200,
width: 200,
image: AssetImage("assets/images/freelance.png"),
),
),
),
);
}
}
这里是 token
函数:
Future<bool> token() async {
final _prefs = await SharedPreferences.getInstance();
_token = _prefs.getString("token");
return _token != null;
}
和 setUser
函数:
void setUser({
@required User user,
}) {
_user = user;
}