gpt4 book ai didi

flutter - 是否有 SwitchListTile 的 cupertino 等价物?

转载 作者:IT王子 更新时间:2023-10-29 06:41:40 30 4
gpt4 key购买 nike

我需要为我的 iOS 应用程序创建一个设置页面。在我的 Android 端,我有 SwitchListTile 来很好地布置开关。

是否有 Flutter 小部件可以帮助我,还是我必须自己编写一个?

最佳答案

您必须自己编写一个,但是您可以很容易地从 SwitchListTile 源代码中抄袭:

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

void main() => runApp(new MyApp());

class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => MyAppState();
}

class MyAppState extends State<MyApp> {
bool _isSelected = false;

@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new SafeArea(
child: new Material(
child: new ListView(
children: <Widget>[
new CupertinoSwitchListTile(
value: _isSelected,
onChanged: (value) {
print("Value changed to $value");
setState(() => _isSelected = value);
},
activeColor: CupertinoColors.activeGreen
)
],
))),
);
}

}

class CupertinoSwitchListTile extends StatelessWidget {
/// This has been shamelessly copied from Material/SwitchListTile.
/// The applicable license applies.
const CupertinoSwitchListTile({
Key key,
@required this.value,
@required this.onChanged,
this.activeColor,
this.title,
this.subtitle,
this.isThreeLine: false,
this.dense,
this.secondary,
this.selected: false,
}) : assert(value != null),
assert(isThreeLine != null),
assert(!isThreeLine || subtitle != null),
assert(selected != null),
super(key: key);

/// Whether this switch is checked.
///
/// This property must not be null.
final bool value;

/// Called when the user toggles the switch on or off.
///
/// The switch passes the new value to the callback but does not actually
/// change state until the parent widget rebuilds the switch tile with the
/// new value.
///
/// If null, the switch will be displayed as disabled.
///
/// The callback provided to [onChanged] should update the state of the parent
/// [StatefulWidget] using the [State.setState] method, so that the parent
/// gets rebuilt; for example:
///
/// ```dart
/// new SwitchListTile(
/// value: _lights,
/// onChanged: (bool newValue) {
/// setState(() {
/// _lights = newValue;
/// });
/// },
/// title: new Text('Lights'),
/// )
/// ```
final ValueChanged<bool> onChanged;

/// The color to use when this switch is on.
///
/// Defaults to accent color of the current [Theme].
final Color activeColor;

/// The primary content of the list tile.
///
/// Typically a [Text] widget.
final Widget title;

/// Additional content displayed below the title.
///
/// Typically a [Text] widget.
final Widget subtitle;

/// A widget to display on the opposite side of the tile from the switch.
///
/// Typically an [Icon] widget.
final Widget secondary;

/// Whether this list tile is intended to display three lines of text.
///
/// If false, the list tile is treated as having one line if the subtitle is
/// null and treated as having two lines if the subtitle is non-null.
final bool isThreeLine;

/// Whether this list tile is part of a vertically dense list.
///
/// If this property is null then its value is based on [ListTileTheme.dense].
final bool dense;

/// Whether to render icons and text in the [activeColor].
///
/// No effort is made to automatically coordinate the [selected] state and the
/// [value] state. To have the list tile appear selected when the switch is
/// on, pass the same value to both.
///
/// Normally, this property is left to its default value, false.
final bool selected;

@override
Widget build(BuildContext context) {
var color = activeColor ?? Theme.of(context).accentColor;
print("Active color: ${color.red} ${color.green} ${color.blue}");
final Widget control = new CupertinoSwitch(
value: value,
onChanged: onChanged,
activeColor: activeColor ?? CupertinoColors.activeGreen,
);
return new MergeSemantics(
child: ListTileTheme.merge(
selectedColor: activeColor ?? CupertinoColors.activeGreen,
child: new ListTile(
leading: secondary,
title: title,
subtitle: subtitle,
trailing: control,
isThreeLine: isThreeLine,
dense: dense,
enabled: onChanged != null,
onTap: onChanged != null
? () {
onChanged(!value);
}
: null,
selected: selected,
),
),
);
}
}

正如我在源代码中指出的那样,因为它是从 flutter 源代码复制的 license at time of copying来自源适用。

关于flutter - 是否有 SwitchListTile 的 cupertino 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091392/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com