我想在顫動中設定bool vfrom的值,但得到.SharedPreferencesLateInitializationError
這是我的代碼:
import 'package:agl_mdd/home/home.dart';
import 'package:agl_mdd/start.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
late bool v;
bool getIsForFirstTime() {
SharedPreferences.getInstance().then((value) {
if (value.get('isBank') != null){
v = true;
}else {
v = false;
}
});
return v;
}
return MaterialApp(
title: 'App...',
theme: ThemeData(
),
debugShowCheckedModeBanner: false,
home: getIsForFirstTime() ? const Home(wholeDataList: []) : const Start(),
);
}
}
uj5u.com熱心網友回復:
問題是您要回傳執行v之前的值then。我建議在 main 方法中創建所有這些邏輯,然后將結果布林值賦給MyApp
Future<void> main() async{
WidgetsFlutterBinding.ensureInitialized();
final v = await getIsForFirstTime();
runApp( MyApp(firstTime: v,));
}
Future<bool> getIsForFirstTime() async{
final sharedPrefs=await SharedPreferences.getInstance();
return sharedPrefs.get('isBank') != null;
}
class MyApp extends StatelessWidget {
const MyApp({Key? key,required this.firstTime,}) : super(key: key);
final bool firstTime;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'App...',
theme: ThemeData(
),
debugShowCheckedModeBanner: false,
home: firstTime ? const Home(wholeDataList: []) : const Start(),
);
}
}
這是一個更干凈的代碼,更容易閱讀。請注意,WIdgetsFlutterBinding 是必要的,以便使 main 方法成為Future
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439620.html
