|
1 | 1 | import { Application, Http, ImageSource } from '@nativescript/core'; |
2 | | -import { registerWidgetListener, LinearLayout, ImageView, Image, Button, VStack, List, Text, updateWidget, Root, HStack, ButtonView, Flipper, Chronometer, Clock, Grid, ProgressBar, Stack, Spacer } from '@nativescript/widgets'; |
| 2 | +import { registerWidgetListener, LinearLayout, ImageView, Image, Button, VStack, List, Text, updateWidget, Root, HStack, ButtonView, Flipper, Chronometer, Clock, Grid, ProgressBar, Stack, Spacer, Switch, CheckBox, RadioButton } from '@nativescript/widgets'; |
3 | 3 | // uncomment to test Flutter |
4 | 4 | // import { init } from '@nativescript/flutter'; |
5 | 5 | // init(); |
@@ -126,6 +126,45 @@ function gridWidget(provider: string, ids: number[]) { |
126 | 126 | for (const id of ids) updateWidget(provider, root, id); |
127 | 127 | } |
128 | 128 |
|
| 129 | +// 6b. Toggle widget (single Switch) |
| 130 | +function toggleWidget(provider: string, ids: number[]) { |
| 131 | + const root = Root(() => VStack(() => [HStack(() => [Text('🔔 Notifications').setTextSize(16), Spacer(), Text('On').setTextSize(12)]), Spacer(12), HStack(() => [Text('Push alerts').setTextSize(14), Spacer(), Switch(true)]), Spacer(8), Text('Tap the switch to toggle').setColor('#95a5a6').setTextSize(11)])) |
| 132 | + .setBackgroundColor('#ffffff') |
| 133 | + .setPadding(12); |
| 134 | + |
| 135 | + for (const id of ids) updateWidget(provider, root, id); |
| 136 | +} |
| 137 | + |
| 138 | +// 6c. Checklist widget (multiple checkboxes) |
| 139 | +function checklistWidget(provider: string, ids: number[]) { |
| 140 | + const items = [ |
| 141 | + { label: 'Buy groceries', checked: true }, |
| 142 | + { label: 'Send invoices', checked: false }, |
| 143 | + { label: 'Workout', checked: false }, |
| 144 | + ]; |
| 145 | + |
| 146 | + const root = Root(() => VStack(() => [Text('🗒️ Today').setTextSize(18), Spacer(8), ...items.map((it) => HStack(() => [CheckBox(it.checked).onCheck('toggle', { label: it.label }), Spacer(8), Text(it.label).setTextSize(14)]).setMargin(6, 8, 6, 8))])) |
| 147 | + .setBackgroundColor('#ffffff') |
| 148 | + .setPadding(12); |
| 149 | + |
| 150 | + for (const id of ids) updateWidget(provider, root, id); |
| 151 | +} |
| 152 | + |
| 153 | +// 6d. Radio group widget (select one) |
| 154 | +function radioWidget(provider: string, ids: number[]) { |
| 155 | + const options = [ |
| 156 | + { label: 'Home', checked: true }, |
| 157 | + { label: 'Work', checked: false }, |
| 158 | + { label: 'Travel', checked: false }, |
| 159 | + ]; |
| 160 | + |
| 161 | + const root = Root(() => VStack(() => [Text('📍 Mode').setTextSize(18), Spacer(8), ...options.map((opt) => HStack(() => [RadioButton(opt.checked), Spacer(8), Text(opt.label).setTextSize(14)]).setMargin(6, 6, 6, 6))])) |
| 162 | + .setBackgroundColor('#ffffff') |
| 163 | + .setPadding(12); |
| 164 | + |
| 165 | + for (const id of ids) updateWidget(provider, root, id); |
| 166 | +} |
| 167 | + |
129 | 168 | // 7. StackView (swipeable cards) |
130 | 169 | function stackWidget(provider: string, ids: number[]) { |
131 | 170 | const cards = [ |
@@ -196,15 +235,21 @@ registerWidgetListener('org.nativescript.plugindemo.PluginDemoWidgetProvider', { |
196 | 235 | onClick(event) { |
197 | 236 | console.log('Widget clicked', event); |
198 | 237 | }, |
| 238 | + onCheck(event) { |
| 239 | + console.log('Check toggled', event); |
| 240 | + }, |
199 | 241 | onUpdate: (event) => { |
200 | 242 | // dashboardWidget(event.provider, event.appWidgetIds); |
201 | 243 | //countdownWidget(event.provider, event.appWidgetIds); |
202 | 244 | // clockWidget(event.provider, event.appWidgetIds); |
203 | 245 | // progressWidget(event.provider, event.appWidgetIds); |
204 | 246 | // listWidget(event.provider, event.appWidgetIds); |
205 | 247 | // slideshowWidget(event.provider, event.appWidgetIds); |
206 | | - gridWidget(event.provider, event.appWidgetIds); |
| 248 | + //gridWidget(event.provider, event.appWidgetIds); |
207 | 249 | //stackWidget(event.provider, event.appWidgetIds); |
| 250 | + toggleWidget(event.provider, event.appWidgetIds); |
| 251 | + // checklistWidget(event.provider, event.appWidgetIds); |
| 252 | + // radioWidget(event.provider, event.appWidgetIds); |
208 | 253 | /* const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]; |
209 | 254 | const list = List( |
210 | 255 | data.length, |
|
0 commit comments