[英]Flutter: Cant' use widget.variable to access widget variable
我不能在 _MenuStatefulWidgetState 中使用widget.message
,錯誤說The getter 'message' is not defined for the class 'MenuStatefulWidget 。
我想是因為我正在使用 FutureBuilder,並試圖在構建器中訪問 widget.message builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot)
我該如何解決這個問題?
class MenuStatefulWidget extends StatefulWidget {
MenuStatefulWidget({Key key, String message}) : super(key: key);
@override
_MenuStatefulWidgetState createState() => _MenuStatefulWidgetState();
}
class _MenuStatefulWidgetState extends State<MenuStatefulWidget> {
Widget build(BuildContext context) {
String storeID =
Provider.of<AppData>(context, listen: true).selectedStoreId;
String storeMenuFilename = 'store_$storeID.json';
Future _menuDataFuture = getFile(storeMenuFilename);
return FutureBuilder<dynamic>(
future: _menuDataFuture,
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
List<Widget> children;
if (snapshot.hasData) {
children = [];
var storeData = snapshot.data;
Provider.of<AppData>(context, listen: false).setStoreData(storeData);
var menu = storeData['menu'];
var itemOption = storeData['option'];
for (var category in menu) {
(category as Map<String, dynamic>).forEach((key, value) {
children.add(CategoryWidget(name: key));
for (var course in value) {
children.add(LineWidget(course, itemOption));
}
});
}
} else if (snapshot.hasError) {
children = <Widget>[
Icon(
Icons.error_outline,
color: Colors.red,
size: 60,
),
];
} else {
if (widget.message != null){
children.add(
Container(
margin: topBottomMargin,
child: Text(widget.message,
),
),
);
}
children.add(
Container(
padding: EdgeInsets.fromLTRB(0, 20, 0, 0),
child: Center(
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(),
],
),
),
));
}
return Center(
child: ListView(
children: children,
),
);
},
);
}
}
您需要在小部件中創建一個名為 message 的變量,然后提供對它的引用,如下所示:
class MenuStatefulWidget extends StatefulWidget {
String message;
MenuStatefulWidget({Key key, this.message}) : super(key: key);
@override
_MenuStatefulWidgetState createState() => _MenuStatefulWidgetState();
}
使用上面的代碼,我們在 MenuStatefulWidget 中聲明了名為“message”的變量,它將被分配作為參數傳遞給 MenuStatefulWidget 的值。 現在您可以使用
widget.message
class MenuStatefulWidget extends StatefulWidget {
String message;
MenuStatefulWidget({Key key, String message}) : super(key: key);
@override
_MenuStatefulWidgetState createState() => _MenuStatefulWidgetState();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.