Dart не поддерживает асинхронные c конструкторы, поэтому я думаю, что мы должны использовать другой подход. Я обычно создаю экран spla sh (или экран загрузки, как вы его называете), чтобы загрузить все основные данные c сразу после открытия приложения.
Но если вы хотите получить только данные темы, Вы можете использовать пару async / await в методе main:
void main() async {
WidgetsFlutterBinding.ensureInitialized(); // this line is needed to use async/await in main()
final prefs = await SharedPreferences.getInstance();
final isDarkTheme = prefs.getBool("is_dark_theme") ?? false;
runApp(MyApp(isDarkTheme));
}
После этого мы можем передать этот фрагмент данных темы в конструктор General:
class MyApp extends StatelessWidget {
final bool isDarkTheme;
MyApp(this.isDarkTheme);
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => General(isDarkTheme), // pass it here
child: MaterialApp(
home: YourScreen(),
),
);
}
}
Мы должны изменить бит в общем классе, метод loadDefaultTheme не указан.
class General with ChangeNotifier {
bool isDarkTheme;
General(this.isDarkTheme);
// ...
}