我想使代码更简洁。 哪一个更好? 使用StatelessWidget是否会影响性能?
如果只有一个地方可以使用此小部件,请使用哪个地方?
class WebViewPopupMenu extends StatelessWidget {
@override
Widget build(BuildContext context) {
return PopupMenuButton(
itemBuilder: (context) => <PopupMenuItem<int>>[
_buildItem(0, 'Refresh', Icons.refresh),
WebViewPopupMenuItem(1, 'Favourite', Icons.favorite_border)
],
);
}
/// 1 used Function
_buildItem(value, text, iconData) {
return PopupMenuItem<int>(
value: value,
child: Row(
children: <Widget>[
Icon(
iconData,
size: 20,
),
Text(text)
],
),
);
}
}
/// 2 used StatelessWidget
class WebViewPopupMenuItem<T> extends StatelessWidget {
final T value;
final IconData iconData;
final String text;
WebViewPopupMenuItem(this.value, this.iconData, this.text);
@override
Widget build(BuildContext context) {
return PopupMenuItem<T>(
value: value,
child: Row(
children: <Widget>[
Icon(iconData,size: 20),
Text(text)
],
),
);
}
}
这是代码
答案 0 :(得分:0)
如果可以,请始终将无状态或有状态小部件与返回小部件的函数一起使用。
我将使用无状态窗口小部件创建一个新文件。然后,在原始文件中导入无状态窗口小部件,并正常使用它。这是使用您显示的代码的示例:
父窗口小部件(WebViewPopupMenu.dart):
import './WebViewPopupMenuItem.dart';
class WebViewPopupMenu extends StatelessWidget {
@override
Widget build(BuildContext context) {
return PopupMenuButton(
itemBuilder: (context) => <PopupMenuItem<int>>[
_buildItem(0, 'Refresh', Icons.refresh),
WebViewPopupMenuItem(1, 'Favourite', Icons.favorite_border)
],
);
}
/// 1 used Function
_buildItem(value, text, iconData) {
return PopupMenuItem<int>(
value: value,
child: Row(
children: <Widget>[
Icon(
iconData,
size: 20,
),
Text(text)
],
),
);
}
}
子窗口小部件(WebViewPopupMenuItem.dart):
class WebViewPopupMenuItem<T> extends StatelessWidget {
final T value;
final IconData iconData;
final String text;
WebViewPopupMenuItem(this.value, this.iconData, this.text);
@override
Widget build(BuildContext context) {
return PopupMenuItem<T>(
value: value,
child: Row(
children: <Widget>[
Icon(iconData,size: 20),
Text(text)
],
),
);
}
}
导入文件后,您只需正常使用小部件即可。
希望这对您有所帮助。真的很容易做,并使所有内容简洁明了。