[英]flutter - change child widget with drawer child widget onTap
我flutter
初學者。 我將主頁分為2個自定義小部件, top
小部件和page
小部件。 我有一個帶有幾個按鈕的抽屜來更改page
小部件的內容。
我按照本教程嘗試按下按鈕交換小部件。
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
var currentpage = 'landing';
Widget pageWidget;
switch (currentpage) {
case 'landing':
pageWidget = new Landing();
break;
case 'visitors':
pageWidget = new Visitors();
break;
default:
}
return Scaffold(
body:new Container(
child: Container(
child: Column(
children: <Widget>[
Header(), ///<-- widget declared in separated .dart file
pageWidget
],
)
)
drawer: Drawer(
child: ListView(
children: <Widget>[
DrawerHeader(
child: Text(
"UserN3",
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.black54),
),
),
new GestureDetector(
onTap: (){
print("landing");
Future.delayed(Duration.zero,(){
setState(() {
currentpage = 'landing';
});
});
},
child: new Text("landing"),
),
new GestureDetector(
onTap: (){
print("visitors");
Future.delayed(Duration.zero,(){
setState(() {
currentpage = 'visitors';
});
});
},
child: new Text("Visitors"),
),
],
),
),
);
}
所以要點是:
我有switch case
在構建,這將改變pageWidget
相應基於currentpage
,這將通過按鈕在抽屜被改變。
但是繼續得到同樣的錯誤:
拋出了另一個異常:當窗口小部件樹被鎖定時調用的setState()或markNeedsBuild()。
如您所見,我根據此建議添加了Future.delayed()
,但錯誤仍然存在。
經過一番研究,我覺得它與drawer
如何處理setState()
,但我不確定如何。
顯然,我仍然沒有得到在build
和state
方面有多么flutter
工作。
什么似乎是問題,我該如何解決這個問題?
您應該在build
方法之外聲明currentPage
變量,因為每次調用setState
時,都會再次調用build
方法,並且變量不會更改。
移動這個:
Widget build(BuildContext context) {
var currentpage = 'landing';
對此:
var currentpage = 'landing';
Widget build(BuildContext context) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.