如何在類中宣告欄位并在 initState() 函式中對其進行初始化。我嘗試了兩種解決方案,仍然無法正常作業。第一:宣告欄位并在 initeState 內部初始化仍然不起作用。第二:使用 (?) 操作宣告該欄位,但如果我在 dispose 函式 tabController.dispose() 中使用該欄位,仍然會出現錯誤;
class _TabBarInsideAppBarDemoState extends State<TabBarInsideAppBarDemo>
{
TabController tabController; // **first:** error :on-nullable instance field 'tabController' must be initialized.
//**second** TabController? tabController ; this also give me error in dispose function it says : The method 'dispose' can't be unconditionally invoked because the receiver can be 'null'.
@override
void initState() {
super.initState();
tabController = TabController(length: 3, vsync: this);
}
@override
void dispose() {
tabController.dispose();
super.dispose();
}
Widget getTabBar() {
return TabBar(controller: tabController, tabs: [
Tab(text: "Add", icon: Icon(Icons.add)),
Tab(text: "Edit", icon: Icon(Icons.edit)),
Tab(text: "Delete", icon: Icon(Icons.delete)),
]);
}
Widget getTabBarPages() {
return TabBarView(controller: tabController, children: <Widget>[
Container(color: Colors.red),
Container(color: Colors.green),
Container(color: Colors.blue)
]);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
flexibleSpace: SafeArea(
child: getTabBar(),
),
),
body: getTabBarPages());
}
}
uj5u.com熱心網友回復:
在flutter 2中,您需要指定引數是否可以為可為空或不可為空的物件,如果它可以為空,您需要?在資料型別旁邊添加
TabController? tabController;
但是如果你想懶惰地宣告,那么你可以使用late關鍵字。
late TabController tabController;
這對編譯器說它不是 null 只是我們稍后要賦值。就像您在 initState 中分配它一樣。
確保在訪問之前分配值,否則會引發例外。
代碼:
late TabController tabController;
@override
void initState() {
super.initState();
tabController = TabController(length: 3, vsync: this);
}
@override
void dispose() {
tabController.dispose();
super.dispose();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314884.html
上一篇:帶圓角的文本欄位:錯誤文本行為
下一篇:影像選擇器掃描到零抖動
