flutter/examples/api/lib/material
Furkan Acar 83ac76050d
Add SegmentedButton.styleFrom (#137542)
fixes https://github.com/flutter/flutter/issues/138289

---

SegmentedButtom.styleFrom has been added to the segment button, so there is no longer any need to the button style from the beginning. It works like ElevatedButton.styleFrom only I added selectedForegroundColor, selectedBackgroundColor. In this way, the user will be able to change the color first without checking the MaterialState states. I added tests of the same controls.

#129215 I opened this problem myself, but I was rejected because I handled too many items in a PR. For now, I wrote a structure that only handles MaterialStates instead of users.

old (still avaliable)
<img width="626" alt="image" src="https://github.com/flutter/flutter/assets/65075121/9446b13b-c355-4d20-bda2-c47a23d42d4f">

new (just an option for developer)
<img width="483" alt="image" src="https://github.com/flutter/flutter/assets/65075121/0a645257-4c83-4029-9484-bd746c02265f">

### Code sample

<details>
<summary>expand to view the code sample</summary> 

```dart
import 'package:flutter/material.dart';

/// Flutter code sample for [SegmentedButton].

void main() {
  runApp(const SegmentedButtonApp());
}

enum Calendar { day, week, month, year }

class SegmentedButtonApp extends StatefulWidget {
  const SegmentedButtonApp({super.key});

  @override
  State<SegmentedButtonApp> createState() => _SegmentedButtonAppState();
}

class _SegmentedButtonAppState extends State<SegmentedButtonApp> {
  Calendar calendarView = Calendar.day;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(useMaterial3: true),
      home: Scaffold(
        body: Center(
          child: SegmentedButton<Calendar>(
            style: SegmentedButton.styleFrom(
              foregroundColor: Colors.amber,
              visualDensity: VisualDensity.comfortable,
            ),
            // style: const ButtonStyle(
            //   foregroundColor: MaterialStatePropertyAll<Color>(Colors.deepPurple),
            //   visualDensity: VisualDensity.comfortable,
            // ),
            segments: const <ButtonSegment<Calendar>>[
              ButtonSegment<Calendar>(
                  value: Calendar.day,
                  label: Text('Day'),
                  icon: Icon(Icons.calendar_view_day)),
              ButtonSegment<Calendar>(
                  value: Calendar.week,
                  label: Text('Week'),
                  icon: Icon(Icons.calendar_view_week)),
              ButtonSegment<Calendar>(
                  value: Calendar.month,
                  label: Text('Month'),
                  icon: Icon(Icons.calendar_view_month)),
              ButtonSegment<Calendar>(
                  value: Calendar.year,
                  label: Text('Year'),
                  icon: Icon(Icons.calendar_today)),
            ],
            selected: <Calendar>{calendarView},
            onSelectionChanged: (Set<Calendar> newSelection) {
              setState(() {
                calendarView = newSelection.first;
              });
            },
          ),
        ),
      ),
    );
  }
}

```

</details>
2024-01-03 21:26:02 +00:00
..
about Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
action_buttons Add missing links to examples that aren't linked anywhere (#130422) 2023-07-12 20:08:05 +00:00
action_chip Enable dangling_library_doc_comments and library_annotations lints (#117365) 2022-12-20 16:03:21 -08:00
animated_icon Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
app [Reland] Introduce AnimationStyle (#138721) 2023-11-20 15:24:41 -08:00
app_bar Replaces textScaleFactor with TextScaler (#128522) 2023-07-17 17:56:07 +00:00
autocomplete fix some typos (#137144) 2023-10-24 15:27:07 +00:00
banner Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
bottom_app_bar Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
bottom_navigation_bar Enable strict-inference (#135043) 2023-09-20 19:59:08 +00:00
bottom_sheet Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
button_style Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
card Add Card.filled and Card.outlined factory methods (#136229) 2023-11-01 23:29:49 +00:00
checkbox Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
checkbox_list_tile Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
chip Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
choice_chip Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
color_scheme Implement switch expressions in examples/ and animation/ (#139882) 2023-12-11 22:56:04 +00:00
context_menu Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
data_table Fix DataTable example not being scrollable (#131556) 2023-09-11 18:55:53 -05:00
date_picker Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
dialog Adaptive alert dialog (#124336) 2023-04-18 23:00:03 +00:00
divider Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
drawer Add missing example links (#130521) 2023-07-17 18:24:49 +00:00
dropdown Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
dropdown_menu Improve DropdownMenu sample code for requestFocusOnTap on mobile platforms (#134867) 2023-09-18 08:33:14 +00:00
elevated_button Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
expansion_panel Update ExpansionPanel example for the updated expansionCallback callback (#132837) 2023-08-21 20:13:22 +00:00
expansion_tile Add AnimationStyle to ExpansionTile (#139664) 2023-12-06 16:40:24 +00:00
filled_button Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
filter_chip Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
flexible_space_bar Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
floating_action_button Add FAB Additional Color Mappings example (#133453) 2023-08-29 17:31:02 +00:00
floating_action_button_location Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
icon_button Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
ink Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
ink_well Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
input_chip Add an example for InputChip generated by user input (#130645) 2023-09-01 00:02:04 +00:00
input_decorator Updated InputDecoratorExamples for M3 (#128065) 2023-06-01 15:22:03 -07:00
list_tile Fix typos in ListTile examples. (#129606) 2023-06-29 06:29:03 +00:00
material_state Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
menu_anchor Convert menus to use OverlayPortal (#130534) 2023-10-18 20:13:08 +00:00
navigation_bar Remove unused generic type from BottomSheet (#137791) 2023-11-03 22:25:37 +00:00
navigation_drawer Add missing example links (#130521) 2023-07-17 18:24:49 +00:00
navigation_rail Add Badge widget to NavigationBar and NavigationRail examples (#129834) 2023-07-11 09:30:05 +00:00
outlined_button Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
page_transitions_theme Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
paginated_data_table PaginatedDataTable improvements (#131374) 2023-08-15 00:55:07 +00:00
platform_menu_bar Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
popup_menu [Reland] Introduce AnimationStyle (#138721) 2023-11-20 15:24:41 -08:00
progress_indicator Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
radio Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
radio_list_tile Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
range_slider Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
refresh_indicator Refactor refresh_indicator.1.dart to not use shrinkwrap (#129377) 2023-07-11 20:04:17 +00:00
reorderable_list Add a ReorderableListView example with cards + cleanup existing tests (#126155) 2023-05-05 16:39:11 +00:00
scaffold Remove unused generic type from BottomSheet (#137791) 2023-11-03 22:25:37 +00:00
scrollbar fix a Scrollbar example crash (#127925) 2023-09-08 09:40:49 +00:00
search_anchor Add missing links to examples that aren't linked anywhere (#130422) 2023-07-12 20:08:05 +00:00
segmented_button Add SegmentedButton.styleFrom (#137542) 2024-01-03 21:26:02 +00:00
selectable_region Fix SelectionArea select-word edge cases (#136920) 2023-12-11 21:32:55 +00:00
selection_area Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
selection_container Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
slider Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
snack_bar Add missing links to examples that aren't linked anywhere (#130422) 2023-07-12 20:08:05 +00:00
stepper Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
switch Adaptive Switch (#130425) 2023-11-07 10:26:23 -08:00
switch_list_tile Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
tab_controller Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
tabs Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
text_button Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
text_field Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
text_form_field Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
theme Rename Sample classes (#124080) 2023-04-04 20:34:29 +00:00
theme_data Fix Typos (#137292) 2023-10-26 23:55:38 +00:00
time_picker Replaces textScaleFactor with TextScaler (#128522) 2023-07-17 17:56:07 +00:00
toggle_buttons Updated TabBar and ToggleButtons examples (#128088) 2023-06-02 01:05:31 +00:00
tooltip Tooltip docs: Recommend setting preferBelow to false in theme (#135879) 2023-11-03 20:18:36 +00:00