我想提取一個帶有onPressed setState的Widget,但我得到的訊息是"對一個包圍類方法的參考不能被提取。"
有什么方法可以做到這一點嗎?
我希望將我的代碼劃分為不同的小部件,以便保持清晰。這里簡化了一個代碼的例子:
import 'package:flutter/material.dart'/span>。
void main() {
runApp(MyApp())。
}
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
首頁。Calculator(),
);
}
}
class Calculator extends StatefulWidget{
@override
_CalculatorState createState() => _CalculatorState()。
}
class _CalculatorState extends State< Calculator> {
var myValue = 0;
void calculate() {
myValue = 12;
}
@override
小工具 build(BuildContext context) {
return Container(
孩子。列(
mainAxisAlignment: MainAxisAlignment.center,
children: [
容器(
孩子。TextButton(
onPressed: () {
setState(() {
計算()。
});
},
孩子。文本(
'Button 001'。
),
),
),
TextOutput(myValue:我的價值)。
],
),
);
}
}
class TextOutput extends StatelessWidget{
const TextOutput({
關鍵的key。
@required this.myValue,
}) : super(key: 關鍵)。
final int myValue;
@override
Widget build(BuildContext context) {
return Container(
孩子。文本(
myValue.toString(),
),
);
}
}
我想提取到一個單獨的小部件的部分:
Container(
孩子。TextButton(
onPressed: () {
setState(() {
計算()。
});
},
孩子。文本(
'Button 001'。
),
),
),
uj5u.com熱心網友回復:
Setstate與你想重繪 其狀態的widget有關。如果你把它提取到另一個地方,那么setState指的是新的widget的狀態。
在你的案例中,setState 只會改變封裝你的 widget 的容器的狀態,而你試圖提取它和它的子代,它不會向上遷移。
除非你使用exact type來尋找你想要的 widget 的狀態,然后在那里觸發狀態,但這是過猶不及,比你目前的情況要難得多,需要更多的代碼。
uj5u.com熱心網友回復:
你可以在提取部件上使用VoidCallback來獲得onPressed事件
class MyContainer extends StatelessWidget{
final VoidCallback onTap;
const MyContainer({
Key? key,
required this.onTap,
}) : super(key: 關鍵)。
@override
Widget build(BuildContext context) {
return Container(
孩子。TextButton(
onPressed: onTap,
孩子。文本(
'Button 001',
),
),
);
}
}
而使用像
MyContainer(
onTap: () {
print("tapped"/span>)。
設定狀態(() {
計算()。
});
},
),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/309227.html
標籤:
上一篇:<p>我在兩個輸入欄位中都使用了同樣的技術,在我的占位符中使用了fontawesome圖示。在搜索的情況下,它作業得很好,但在位置的情況下,它不作業,我已經嘗試改變CDN鏈接,但它不作業。
下一篇:在JS中輸出鏈接的問題
