예제 #1
0
        public override Widget build(BuildContext context)
        {
            D.assert(material_.debugCheckHasMaterial(context));
            Color     currentColor       = null;
            Color     currentFillColor   = null;
            Color     currentFocusColor  = null;
            Color     currentHoverColor  = null;
            Color     currentSplashColor = null;
            ThemeData theme = Theme.of(context);
            ToggleButtonsThemeData toggleButtonsTheme = ToggleButtonsTheme.of(context);

            if (onPressed != null && selected)
            {
                currentColor = selectedColor
                               ?? toggleButtonsTheme.selectedColor
                               ?? theme.colorScheme.primary;
                currentFillColor = fillColor
                                   ?? theme.colorScheme.primary.withOpacity(0.12f);
                currentFocusColor = focusColor
                                    ?? toggleButtonsTheme.focusColor
                                    ?? theme.colorScheme.primary.withOpacity(0.12f);
                currentHoverColor = hoverColor
                                    ?? toggleButtonsTheme.hoverColor
                                    ?? theme.colorScheme.primary.withOpacity(0.04f);
                currentSplashColor = splashColor
                                     ?? toggleButtonsTheme.splashColor
                                     ?? theme.colorScheme.primary.withOpacity(0.16f);
            }
            else if (onPressed != null && !selected)
            {
                currentColor = color
                               ?? toggleButtonsTheme.color
                               ?? theme.colorScheme.onSurface.withOpacity(0.87f);
                currentFillColor  = theme.colorScheme.surface.withOpacity(0.0f);
                currentFocusColor = focusColor
                                    ?? toggleButtonsTheme.focusColor
                                    ?? theme.colorScheme.onSurface.withOpacity(0.12f);
                currentHoverColor = hoverColor
                                    ?? toggleButtonsTheme.hoverColor
                                    ?? theme.colorScheme.onSurface.withOpacity(0.04f);
                currentSplashColor = splashColor
                                     ?? toggleButtonsTheme.splashColor
                                     ?? theme.colorScheme.onSurface.withOpacity(0.16f);
            }
            else
            {
                currentColor = disabledColor
                               ?? toggleButtonsTheme.disabledColor
                               ?? theme.colorScheme.onSurface.withOpacity(0.38f);
                currentFillColor = theme.colorScheme.surface.withOpacity(0.0f);
            }

            TextStyle      currentTextStyle   = textStyle ?? toggleButtonsTheme.textStyle ?? theme.textTheme.bodyText2;
            BoxConstraints currentConstraints = constraints ?? toggleButtonsTheme.constraints ??
                                                new BoxConstraints(minWidth: material_.kMinInteractiveDimension,
                                                                   minHeight: material_.kMinInteractiveDimension);

            Widget result = new ClipRRect(
                borderRadius: clipRadius,
                child: new RawMaterialButton(
                    textStyle: currentTextStyle.copyWith(
                        color: currentColor
                        ),
                    constraints: currentConstraints,
                    elevation: 0.0f,
                    highlightElevation: 0.0f,
                    fillColor: currentFillColor,
                    focusColor: currentFocusColor,
                    highlightColor: highlightColor
                    ?? theme.colorScheme.surface.withOpacity(0.0f),
                    hoverColor: currentHoverColor,
                    splashColor: currentSplashColor,
                    focusNode: focusNode,
                    materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                    onPressed: onPressed,
                    child: child
                    )
                );

            return(new _SelectToggleButton(
                       key: key,
                       leadingBorderSide: leadingBorderSide,
                       horizontalBorderSide: horizontalBorderSide,
                       trailingBorderSide: trailingBorderSide,
                       borderRadius: borderRadius,
                       isFirstButton: isFirstButton,
                       isLastButton: isLastButton,
                       child: result
                       ));
        }
예제 #2
0
        public override Widget wrap(BuildContext context, Widget child)
        {
            ToggleButtonsTheme ancestorTheme = context.findAncestorWidgetOfExactType <ToggleButtonsTheme>();

            return(ReferenceEquals(this, ancestorTheme) ? child : new ToggleButtonsTheme(data: data, child: child));
        }
예제 #3
0
        public override Widget build(BuildContext context)
        {
            D.assert(
                !isSelected.Any((bool val) => val == null),
                () => "All elements of isSelected must be non-null.\n" +
                "The current list of isSelected values is as follows:\n" +
                $"{isSelected}"
                );
            D.assert(
                focusNodes == null || !focusNodes.Any((FocusNode val) => val == null),
                () => "All elements of focusNodes must be non-null.\n" +
                "The current list of focus node values is as follows:\n" +
                $"{focusNodes}"
                );
            D.assert(
                () => {
                if (focusNodes != null)
                {
                    return(focusNodes.Count == children.Count);
                }

                return(true);
            },
                () => "focusNodes.length must match children.length.\n" +
                $"There are {focusNodes.Count} focus nodes, while " +
                $"there are {children.Count} children."
                );

            ThemeData theme = Theme.of(context);
            ToggleButtonsThemeData toggleButtonsTheme = ToggleButtonsTheme.of(context);
            TextDirection          textDirection      = Directionality.of(context);

            var childrenList = new List <Widget>(children.Count);

            for (var i = 0; i < children.Count; i++)
            {
                var          index            = i;
                BorderRadius edgeBorderRadius =
                    _getEdgeBorderRadius(index, children.Count, textDirection, toggleButtonsTheme);
                BorderRadius clipBorderRadius =
                    _getClipBorderRadius(index, children.Count, textDirection, toggleButtonsTheme);

                BorderSide leadingBorderSide    = _getLeadingBorderSide(index, theme, toggleButtonsTheme);
                BorderSide horizontalBorderSide = _getHorizontalBorderSide(index, theme, toggleButtonsTheme);
                BorderSide trailingBorderSide   = _getTrailingBorderSide(index, theme, toggleButtonsTheme);

                childrenList.Add(new _ToggleButton(
                                     selected: isSelected[index],
                                     textStyle: textStyle,
                                     constraints: constraints,
                                     color: color,
                                     selectedColor: selectedColor,
                                     disabledColor: disabledColor,
                                     fillColor: fillColor ?? toggleButtonsTheme.fillColor,
                                     focusColor: focusColor ?? toggleButtonsTheme.focusColor,
                                     highlightColor: highlightColor ?? toggleButtonsTheme.highlightColor,
                                     hoverColor: hoverColor ?? toggleButtonsTheme.hoverColor,
                                     splashColor: splashColor ?? toggleButtonsTheme.splashColor,
                                     focusNode: focusNodes != null ? focusNodes[index] : null,
                                     onPressed: onPressed != null
                        ? () => { onPressed(index); }
                        : (VoidCallback)null,
                                     leadingBorderSide: leadingBorderSide,
                                     horizontalBorderSide: horizontalBorderSide,
                                     trailingBorderSide: trailingBorderSide,
                                     borderRadius: edgeBorderRadius,
                                     clipRadius: clipBorderRadius,
                                     isFirstButton: index == 0,
                                     isLastButton: index == children.Count - 1,
                                     child: children[index]
                                     ));
            }

            return(new IntrinsicHeight(
                       child: new Row(
                           crossAxisAlignment: CrossAxisAlignment.stretch,
                           mainAxisSize: MainAxisSize.min,
                           children: childrenList)
                       ));
        }
예제 #4
0
        public static ToggleButtonsThemeData of(BuildContext context)
        {
            ToggleButtonsTheme toggleButtonsTheme = context.dependOnInheritedWidgetOfExactType <ToggleButtonsTheme>();

            return(toggleButtonsTheme?.data ?? Theme.of(context).toggleButtonsTheme);
        }