我的網路應用程式上有一個深色/淺色主題切換選項。我正在使用共享首選項來保留主題選擇。我試圖將主 UI 與所有與主題相關的作業分開。所以我loadPrefs()在我的主題提供者中創建了一個:
loadPrefs() async {
bool isDark = await ThemePreference().isDark();
_mode = isDark ? ThemeMode.dark : ThemeMode.light;
notifyListeners();
}
問題是,由于這是一個異步函式,我不能在MyApp的構造函式中呼叫它,所以我似乎被迫在main()
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final app = await Firebase.initializeApp();
ThemeProvider themeProvider = new ThemeProvider();
await themeProvider.loadPrefs(); //HERE
runApp(MyApp(themeProvider: themeProvider));
}
這真的很混亂,因為現在我必須將主題提供程式傳遞給小部件,然后傳遞給小部件的狀態類。我覺得必須有一種更簡單的方法來做到這一點。
class MyApp extends StatefulWidget {
final ThemeProvider themeProvider;
const MyApp({Key? key, required this.themeProvider}) : super(key: key);
@override
_MyAppState createState() => _MyAppState(themeProvider: themeProvider);
}
class _MyAppState extends State {
ThemeProvider themeProvider;
_MyAppState({required this.themeProvider});
...
uj5u.com熱心網友回復:
如下創建你的狀態類
class _MyAppState extends State<MyApp> {
現在,您可以訪問所有的變數MyApp使用widget.themeProvider
如果你想保留你的狀態類,dynamic那么你必須將你的小部件轉換為
(widget as MyApp).themeProvider
為了更好地管理您的提供商,您可以使用
provider package 這個包將幫助你輕松有效地管理你的所有 provider 官方演講聽聽這個官方的狀態管理演講
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330707.html
