#flutter
Вопрос:
Я знаю, что этот вопрос задавали многие, но я безуспешно пытался работать над кодом. Я использую общие настройки для хранения своей электронной почты после входа пользователя в систему и после выхода из системы электронное письмо должно быть удалено. Это прекрасно работает. При запуске приложения оно должно считывать электронную почту с телефона, используя общие настройки, и если электронная почта существует, пользователь вошел в систему и должен быть переведен на главный экран (), иначе, если электронная почта не существует, пользователь не вошел в систему и поэтому должен быть переведен на экран входа (). Ниже приведен мой код, который при запуске приложения всегда отображается на экране Home (), даже если пользователь вышел из системы. Любой, кто поможет мне понять, где я делаю не то, что нужно. Заранее спасибо.
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Future<String> getSharedPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String _email = prefs.getString('email') ?? '';
return _email;
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'chat app',
home: FutureBuilder<String>(
future: getSharedPrefs(),
builder: (
BuildContext context,
AsyncSnapshot<String> snapshot,
) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return const Text('Error');
} else if (snapshot.hasData) {
return Home();
} else {
return Login();
}
} else {
return Text('State: ${snapshot.connectionState}');
}
},
),
);
}
}
Ответ №1:
Ваш снимок.hasData всегда будет иметь значение true, так как вы возвращаете пустую строку в методе getSharedPrefs, если сообщение электронной почты не существует.
Вы должны изменить его, чтобы snapshot.hasData amp;amp; snapshot.data.isNotEmpty
он работал так, как вы ожидаете.
Комментарии:
1. Большое тебе спасибо, ПайануВлад23. Я изменил его, и он работает так, как я ожидаю, что он будет работать