【问题标题】:Widget and CupertinoWidget : avoid code duplicateWidget 和 CupertinoWidget:避免代码重复
【发布时间】:2021-03-10 11:39:39
【问题描述】:

当我们想要适用于 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;
                    });
                   },
                 )
              );
             }

【问题讨论】:

    标签: flutter dart flutter-widget flutter-cupertino


    【解决方案1】:

    我经常喜欢用我自己的小部件包装“标准”小部件 - 它允许您在一个地方控制它们。附带的好处 - 只在那些 Widget 类中重复代码。

    我还看到有可能移出 onChanged 函数并将其分配给小部件的 onChanged 字段两次,如下所示:

    @override
          Widget build(BuildContext context) {
            return Scaffold(
                appBar: AppBar(),
                body: (Platform.isAndroid)
                    ? Switch(
                       value: activate,
                       onChanged: _handleChange,
                     )
                    : CupertinoSwitch(
                       value: activate,
                       onChanged: _handleChange,
                     )
                  );
                 }
    
    void _handleChange() => setState(() { activate = value; });
    
    

    【讨论】:

    • 感谢您提供的有用提示。我找到了解决方案,如果你想检查,我把它贴在那里:)
    【解决方案2】:

    终于有人给了我解决方案。 我们可以使用构造函数“.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

    【讨论】:

      猜你喜欢
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多