簡體   English   中英

Flutter main.dart 中的 LateInitialization 錯誤

[英]LateInitialization Error In Flutter main.dart

我正在開發我的應用程序,但我不知道為什么會出現這個遲到的初始化錯誤我在其他應用程序中也使用了相同的代碼,但我沒有遇到這樣的錯誤,但在這個主文件中,錯誤仍然存​​在,我一直在試了這么久還是不行。 bool? userLoggedIn bool? userLoggedIn也不起作用,flutter 不允許使用它。 這是我的 main.dart 文件代碼。 另外,如果有人能告訴我如何處理應用程序共享首選項的 2 次登錄,這將很有幫助

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late bool userLoggedIn;
  @override
  void initState() {
    getLoggedInState();
    super.initState();
  }

  getLoggedInState() async {
    await HelperFunctions.getUserLoggedInSharedPreference().then((value) {
      setState(() {
        userLoggedIn = value!;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Dashee',
        theme: ThemeData(
          primarySwatch: Colors.deepPurple,
        ),
        home: userLoggedIn ? const Dashboard() : Splash());
  }
}
  

LateInitializationError表示使用 late 關鍵字聲明的變量未在構造函數上初始化

你聲明這個布爾變量:

late bool userLoggedIn

但是沒有聲明構造函數,所以它不會被初始化,顯而易見的事情是在構造函數上給它一個值,就像這樣:

_MyAppState() {
  userLoggedIn = false; // just some value so dart doesn't complain.
}

但是,我可以建議您不要這樣做,而只需刪除late關鍵字嗎? 這樣做當然會給你一個錯誤,因為userLoggedIn永遠不會被初始化,但是你可以通過直接在它的聲明或構造函數初始化上給它一個默認值來解決這個問題:

bool userLoggedIn = false;

或者

_MyAppState(): userLoggedIn = false;

請注意在第二個選項中我如何沒有使用構造函數的主體,如果您計划在構造函數的主體上初始化變量,則應該僅延遲聲明變量。

這應該可以解決您遇到的LateInitializationError

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM