阅读背景:

Flutter 自定义 RadioListTile

来源:互联网 
import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; /// 自定义 RadioListTile class RadioListTileSuper<T> extends StatelessWidget { const RadioListTileSuper({ Key key, this.value, this.groupValue, this.onChanged, this.toggleable = false, this.activeColor, this.title, this.subtitle, this.isThreeLine = false, this.dense, this.secondary, this.selected = false, this.controlAffinity = ListTileControlAffinity.platform, this.autofocus = false, this.contentPadding, this.shape, this.tileColor, this.selectedTileColor, }) : assert(toggleable != null), assert(isThreeLine != null), assert(!isThreeLine || subtitle != null), assert(selected != null), assert(controlAffinity != null), assert(autofocus != null), super(key: key); final T value; final T groupValue; final ValueChanged<T> onChanged; final bool toggleable; final Color activeColor; final Widget title; final Widget subtitle; final Widget secondary; final bool isThreeLine; final bool dense; final bool selected; final ListTileControlAffinity controlAffinity; final bool autofocus; final EdgeInsetsGeometry contentPadding; bool get checked => value == groupValue; final ShapeBorder shape; final Color tileColor; final Color selectedTileColor; @override Widget build(BuildContext context) { final Widget control = Radio<T>( value: value, groupValue: groupValue, onChanged: onChanged, toggleable: toggleable, activeColor: activeColor, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, autofocus: autofocus, ); Widget leading, trailing; switch (controlAffinity) { case ListTileControlAffinity.leading: case ListTileControlAffinity.platform: leading = control; trailing = secondary; break; case ListTileControlAffinity.trailing: leading = secondary; trailing = control; break; } return MergeSemantics( child: ListTileTheme.merge( selectedColor: activeColor ?? Theme.of(context).accentColor, child: ListTile( leading: leading, title: title, subtitle: subtitle, trailing: trailing, horizontalTitleGap:0,//和源码的区别就是加了一个这个 isThreeLine: isThreeLine, dense: dense, enabled: onChanged != null, shape: shape, tileColor: tileColor, selectedTileColor: selectedTileColor, onTap: onChanged != null ? () { if (toggleable && checked) { onChanged(null); return; } if (!checked) { onChanged(value); } } : null, selected: selected, autofocus: autofocus, contentPadding: contentPadding, ), ), ); } } import 'package:flutter/material.dart'; import 'p



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: