flutter - Widget 和 CupertinoWidget:避免代码重复
问题描述
当我们想要适用于 Android 的平台特定小部件和适用于 iOS 的 Cupertino 小部件(如 Switch)时,如何避免代码重复?
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: (Platform.isAndroid)
? Switch(
value: activate,
onChanged: (value) {
setState(() {
activate = value;
});
},
)
: CupertinoSwitch(
value: activate,
onChanged: (value) {
setState(() {
activate = value;
});
},
)
);
}
解决方案
终于有人给了我解决方案。我们可以使用构造函数“.adaptive()”,它可用于某些 Cupertino 小部件,如 Switch 或 Sliders:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Switch.adaptive(
value: activate,
onChanged: (value) {
setState(() {
activate = value;
});
},
)
);
}
https://api.flutter.dev/flutter/material/Switch/Switch.adaptive.html
如果我们查看 Flutter 中的 Switch.adaptive 构建方法,我们可以看到它会为我们检查 PLatform:Theme.of(context).platform
推荐阅读
- widget - 使用页面属性作为过滤器的动态突出显示内容过滤
- python - Django中的速度优化
- c++ - 在不访问结构成员的情况下如何添加相同类型的值
- meson-build - 如何打印介子中的所有依赖项?
- regex - CMake 负前瞻(RegExp 支持)
- swift - 为什么我不能在我的 swift 代码中返回不透明类型?我已经返回符合该协议的类型
- java - Jackson Custom Serializer 在 Json 序列化期间为 2 个不同的字段显示相同的上下文
- sql - 坚持如何编写数据转换查询
- html - 使用 CSS 将文本调整到右侧
- javascript - React + next 的 onchange 函数问题