對話框小部件是無狀態小部件,所以我想我可以使用statefulbuilder
. 所以我做了這樣的代碼
import 'package:flutter/material.dart';
class TestDialog extends StatefulWidget {
const TestDialog({Key? key}) : super(key: key);
@override
State<TestDialog> createState() => _TestDialogState();
}
class _TestDialogState extends State<TestDialog> {
int i=0;
Future<void> showpopup (context) async {
showDialog(
context: context,
builder: (context){
return Dialog(
child: StatefulBuilder(builder: (BuildContext context, StateSetter setstate){
return Column(
children: [
Row(
children: [
GestureDetector(
child: Container(
child : Text(i.toString())
),
onTap: (){
setState(() {
i ;
});
},
)
],
)
],
);
}),
);
}
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('stateful dialog'),
),
body: Column(
children: [
GestureDetector(
child: Text('yeah'),
onTap: (){
showpopup(context);
},
)
],
),
);
}
}
但在對話框中,數字不會改變。在我關閉對話框并再次打開后,現在它顯示了更改。如何statefulbuilder
正確使用?或者statefulbuilder
在此代碼上無效?
我嘗試將 Future<void> 設為無效,但它與第一??個相同。
uj5u.com熱心網友回復:
您只需更改一個字母即可使您的代碼正常作業。
setState(() {
i ;
});
至
setstate(() {
i ;
});
使用 a 時,StatefulBuilder
您需要使用提供StateSetter
的來指示其中的狀態更改。盡管在我看來,做你想做的事是一種過于復雜的方式。
uj5u.com熱心網友回復:
您呼叫了 setState 而不是呼叫 setstate。在您的有狀態構建器中,您已將 StateSetter 命名為 setstate,這就是您需要呼叫來更新對話框的函式
uj5u.com熱心網友回復:
您需要創建一個臨時變數。并更改該變數的值。和下面一樣
int i=0;
Future<void> showpopup (context) async {
showDialog(
context: context,
builder: (context){
return Dialog(
child: StatefulBuilder(builder: (BuildContext context, StateSetter setstate){
int temp = i;
return Column(
children: [
Row(
children: [
GestureDetector(
child: Container(
child : Text(temp.toString())
),
onTap: (){
setState(() {
temp ;
});
},
)
],
)
],
);
}),
);
}
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523819.html
標籤:扑镖颤振布局对话有状态的