如何在颤动中管理开关小部件的原生外观

Posted

技术标签:

【中文标题】如何在颤动中管理开关小部件的原生外观【英文标题】:How to manage native looks of switch widget in flutter 【发布时间】:2020-02-07 17:10:44 【问题描述】:

我想在 Flutter/Dart 中创建具有不同操作系统的原生外观的切换/切换小部件。我的意思是,如果我在 ios 移动设备上运行,它应该看起来像:

如果我在 android 手机上运行,​​它应该是这样的:

帮我在flutter/dart中实现这类功能

【问题讨论】:

你可以在这里观看本教程:youtube.com/watch?v=TYNbMnaEnmA 【参考方案1】:

使用Switch.adaptive

如果目标平台是 iOS,则创建 CupertinoSwitch,否则创建 Material Design 开关。

Switch.adaptive(value: true, onChanged: (newValue) )

示例代码:

bool _value = true;

@override
Widget build(BuildContext context) 
  return Scaffold(
    appBar: AppBar(),
    body: Switch.adaptive(
      value: _value,
      onChanged: (newValue) => setState(() => _value = newValue),
    ),
  );

【讨论】:

【参考方案2】:

您可以检查用户在哪个平台上,然后显示适当的特定于平台的小部件。 Switch 是用于切换的 Android 小部件,CupertinoSwitch 是 iOS 等价物。两个小部件的参数相同,因此 CopsOnRoad 的解决方案更加简洁,但这是获取特定于平台的小部件的另一种方式。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:io';

Platform.isAndroid ? Switch() : CupertinoSwitch()

【讨论】:

以上是关于如何在颤动中管理开关小部件的原生外观的主要内容,如果未能解决你的问题,请参考以下文章

setState 是不是会在颤动中为屏幕重建整个小部件树,以及它与其他状态管理相比如何

在 Flutter 中按下切换开关时交换小部件

如何管理行中的小部件(颤动)一个在左边,另一个在右边

Qt5:Android 上的原生外观小部件

如何在颤动中加载主小部件之前显示加载小部件?

如何在颤动中从父小部件调用子小部件的initState()方法