@@ -23,7 +23,7 @@ class _FeaturesModalSelectorState extends State<FeaturesModalSelector> {
2323 onChange: (state) => setState (() => _fruit = state.value),
2424 choiceItems: choices.fruits,
2525 modalType: S2ModalType .popupDialog,
26- modalConfirmation : true ,
26+ modalConfirm : true ,
2727 modalValidation: (value) => value.length > 0 ,
2828 tileBuilder: (context, state) {
2929 return S2Tile .fromState (
@@ -88,45 +88,63 @@ class _FeaturesModalSelectorState extends State<FeaturesModalSelector> {
8888 meta: (index, item) => item,
8989 ),
9090 choiceType: S2ChoiceType .chips,
91- modalType: S2ModalType .bottomSheet,
92- modalActionsBuilder: (context, state) {
93- return [
94- ActionButton (
95- label: const Text ('Low End' ),
96- onTap: () {
97- state.changes.value = state.widget.choiceItems
98- .where ((item) => item.meta['category' ] == 'Budget Phone' )
99- .map ((item) => item.value)
100- .toList ();
101- },
102- ),
103- ActionButton (
104- label: const Text ('Mid End' ),
105- onTap: () {
106- state.changes.value = state.widget.choiceItems
107- .where ((item) => item.meta['category' ] == 'Mid End Phone' )
108- .map ((item) => item.value)
109- .toList ();
110- },
111- ),
112- ActionButton (
113- label: const Text ('High End' ),
114- onTap: () {
115- state.changes.value = state.widget.choiceItems
116- .where ((item) => item.meta['category' ] == 'Flagship Phone' )
117- .map ((item) => item.value)
118- .toList ();
119- },
91+ modalFilter: true ,
92+ modalType: S2ModalType .fullPage,
93+ modalFooterBuilder: (context, state) {
94+ return Container (
95+ child: Row (
96+ mainAxisAlignment: MainAxisAlignment .spaceEvenly,
97+ children: < Widget > [
98+ ActionButton (
99+ label: const Text ('All/None' ),
100+ onTap: () {
101+ state.changes.selectToggle ();
102+ },
103+ ),
104+ ActionButton (
105+ label: const Text ('Low End' ),
106+ onTap: () {
107+ state.changes.value = state.widget.choiceItems
108+ .where ((item) => item.meta['category' ] == 'Budget Phone' )
109+ .map ((item) => item.value)
110+ .toList ();
111+ },
112+ ),
113+ ActionButton (
114+ label: const Text ('Mid End' ),
115+ onTap: () {
116+ state.changes.value = state.widget.choiceItems
117+ .where ((item) => item.meta['category' ] == 'Mid End Phone' )
118+ .map ((item) => item.value)
119+ .toList ();
120+ },
121+ ),
122+ ActionButton (
123+ label: const Text ('High End' ),
124+ onTap: () {
125+ state.changes.value = state.widget.choiceItems
126+ .where ((item) => item.meta['category' ] == 'Flagship Phone' )
127+ .map ((item) => item.value)
128+ .toList ();
129+ },
130+ ),
131+ ],
120132 ),
121- ] ;
133+ ) ;
122134 },
123135 tileBuilder: (context, state) {
124- return S2Tile .fromState (
136+ return S2ChipsTile < String > .fromState (
125137 state,
126- isTwoLine : true ,
138+ trailing : const Icon ( Icons .add_circle_outline) ,
127139 leading: const CircleAvatar (
128140 backgroundImage: NetworkImage ('https://source.unsplash.com/xsGxhtAsfSA/100x100' ),
129141 ),
142+ chipColor: Colors .blue,
143+ chipBorderOpacity: .3 ,
144+ chipBrightness: Brightness .light,
145+ chipOnDelete: (value) {
146+ setState (() => _smartphone.remove (value));
147+ },
130148 );
131149 }
132150 ),
@@ -149,16 +167,11 @@ class ActionButton extends StatelessWidget {
149167
150168 @override
151169 Widget build (BuildContext context) {
152- return Center (
153- child: Padding (
154- padding: const EdgeInsets .fromLTRB (0 , 0 , 10 , 0 ),
155- child: FlatButton (
156- child: label,
157- color: Colors .redAccent,
158- textColor: Colors .white,
159- onPressed: onTap,
160- ),
161- ),
170+ return FlatButton (
171+ child: label,
172+ color: Colors .blue,
173+ textColor: Colors .white,
174+ onPressed: onTap,
162175 );
163176 }
164177}
0 commit comments