Вы должны убедиться, что выполняете эту инициализацию перед вызовом runApp()
. Объявите ваш initialRoute
в переменной, чтобы вы могли изменить его в зависимости от того, вошел ли пользователь в систему или нет. Также вы должны вызвать WidgetsFlutterBinding.ensureInitialized()
, чтобы иметь возможность дождаться окончания обработки, и объявить ваш метод main
как async
.
Примерно так:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
var initialRoute = 'login';
var isUserLoggedIn = await User.IsUserLoggedIn();
if (isUserLoggedIn) {
initialRoute = 'home';
}
runApp(MyApp(initialRoute: initialRoute));
}
class MyApp extends StatelessWidget {
final String initialRoute;
MyApp({@required this.initialRoute});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: initialRoute,
routes: {
'login': (context) => LoginPage(),
'home': (context) => HomePage(),
}
);
}
}
Все это происходит до того, как вызов runApp
будет выполнен, пока виден spla sh.