У меня проблема с моим приложением.
Ситуация такова: у меня очень простая система входа в приложение, и я сохраняю зарегистрированного пользователя с помощью SharedPreferences. Но если пользователь покидает приложение и затем возвращается, он снова открывает экран входа в систему, поэтому я хочу пропустить экран входа в систему, если пользователь вошел в систему.
Так что в моем главном я поставил функцию, чтобы проверить, есть ли это информация для входа, если да, она перенаправит прямо на страницу приложения или на страницу входа, если нет. Но когда я пытаюсь вызвать страницу приложения, она всегда вызывает страницу, установленную на домашней странице.
Как я могу решить эту проблему? Есть ли способ заставить его игнорировать Дом? Есть ли способ сделать "если" часть дома? Было бы лучшим решением, но это невозможно.
Также я знаю, что я не использую лучший способ сделать этот элемент управления, но он работает (несмотря на эту проблему у меня сейчас, конечно), и если у вас есть любые советы по его улучшению, я был бы признателен.
Вот мой код:
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
void main() => runApp(new MyApp());
class _MyAppState extends State<MyApp> {
Future<void> verificaLogin() async {
print("running ok"); //just to test if the function runs
final prefs = await SharedPreferences.getInstance();
final key = 'usuario';
final value = prefs.getString(key);
print('saved tester $value');
String usu = value; /
if (usu.isEmpty) {
BuildContext context;
Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginScreen()), //sends to loginscreen if not logged
);
}
if (usu.isNotEmpty) {
BuildContext context;
Navigator.of(context)
.pushReplacement(MaterialPageRoute(builder: (context) => Pedidos())); //sends to main (not main.dart) app page
}
}
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => verificaLogin());
}
Widget build(BuildContext context) {
return BotToastInit(
child: MaterialApp(
navigatorObservers: [BotToastNavigatorObserver()],
title: "Test App",
theme: ThemeData(
primarySwatch: Colors.green,
),
debugShowCheckedModeBanner: false,
home: LoginScreen(), //i'm calling the loginscreen, it ignores the function on the top
),
);
}
}