Theory
કોઈને રોક્યા વગર કહી દો
Booking સચવાઈ ગયું. User ને એની ખબર પડવી જોઈએ, પણ ગયા પાઠનું dialog અહીં અસભ્ય ગણાય: ફક્ત જાણ કરવા માટે આખું કામ થોભાવીને પૂછપરછ કરવી.
Android એ આ સમસ્યા વર્ષો પહેલાં Toast થી ઉકેલી હતી: એવો નાનકડો પસાર થતો સંદેશો જે જાતે જ જતો રહે. તમારો અભ્યાસક્રમ Flutter વાળી આવૃત્તિ માગે છે, અને અહીં જ પ્રામાણિકતાની એ ચોકી આવે છે જે ગોખનારા વિદ્યાર્થીઓને ખરેખર જાણનારા વિદ્યાર્થીઓથી અલગ પાડે છે: Flutter માં Toast નામનું કોઈ built-in widget છે જ નહીં. એની પાસે જે છે તે દલીલપાત્ર રીતે વધુ સારું છે.
Theory
SnackBar: Flutter નો પોતાનો પસાર થતો સંદેશો
Toast જેવા સમાચાર માટે Flutter ની રીત એટલે SnackBar: એવી પટ્ટી જે નીચેથી ઉપર સરકે છે, થોડી વાર થોભે છે અને પછી જતી રહે છે:
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Booking saved'),
duration: Duration(seconds: 2),
),
);
ScaffoldMessenger એ સંદેશો પહોંચાડનાર છે (અને એ પણ એક કારણ છે કે screens Scaffold થી શરૂ થાય છે: એ પાઠ વારંવાર કામ લાગે છે). અને SnackBar પાસે એક એવી તાકાત છે જે toast પાસે કદી નહોતી: action, એટલે કે જાણીતું UNDO.
Practical
સચવાઈ ગયું, નમ્રતાથી કહેવાયું, અને નીકળવાનો રસ્તો પણ
void onBookingSaved() {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: const Text('Garba Night booked!'),
duration: const Duration(seconds: 3),
action: SnackBarAction( // એ તાકાત જે Toast પાસે કદી નહોતી
label: 'UNDO',
onPressed: () { /* બેઠક પાછી છોડી દો */ },
),
),
);
}
// reminders વાળું setting: Switch, controlled નિયમનો ચોથો સાક્ષી
bool reminders = true;
SwitchListTile(
title: const Text('Event reminders'),
value: reminders,
onChanged: (v) {
setState(() { reminders = v; }); // બદલાય છે અને અત્યારે જ અમલમાં આવે છે
},
)
Theory
Switch: એ જ યંત્રરચના, જુદું વચન
યંત્રરચનાની દૃષ્ટિએ Switch એ Checkbox નું જોડિયું છે: value: માં bool, onChanged: સાથે setState, અને null આપો તો એ બંધ થઈ જાય: એટલે કે controlled widget નો નિયમ ચોથી વાર જુબાની આપે છે. SwitchListTile એ લેબલવાળી હરોળનું સ્વરૂપ છે.
ફરક user ને અપાતા વચનમાં છે:
- switch એવું setting બદલે છે જે તરત જ અમલમાં આવે: reminders ચાલુ, dark mode ચાલુ, અને પછી કોઈ Submit બટન આવતું નથી
- checkbox એવી પસંદગી નોંધે છે જેને form પછીથી submit કરશે: થેલી સાથે લેવી, શરતો સ્વીકારવી
નીચે એ જ bool છે; પણ screen પર સામાજિક કરાર જુદો છે. એ કરાર પ્રમાણે પસંદ કરવું એ રચનાની એવી સૂઝ છે જેના ગુણ પરીક્ષકો ખરેખર આપે છે.
Quiz
તમારો અભ્યાસક્રમ Toast કહે છે. Flutter માં Toast વિશે પ્રામાણિક અને પરીક્ષામાં સલામત વિધાન કયું છે?
- Flutter માં Toast widget આવે છે: Toast.show(context, 'message')
- Flutter માં built-in Toast છે જ નહીં: SnackBar એનો પોતાનો સમકક્ષ છે, અને Android જેવા toasts fluttertoast package માંથી મળે છે
- Flutter માં toasts એટલે ટૂંકા સમય માટે દેખાતાં AlertDialogs
- SnackBar અને Toast એ એક જ built-in widget નાં બે નામ છે
Show the answer
Flutter માં built-in Toast છે જ નહીં: SnackBar એનો પોતાનો સમકક્ષ છે, અને Android જેવા toasts fluttertoast package માંથી મળે છે
પ્રામાણિક નકશામાં ત્રણ નિશાનીઓ છે: built-in Toast છે જ નહીં; SnackBar એ framework નો પોતાનો પસાર થતો સંદેશો છે (નીચેની પટ્ટી, જાતે જ જતી રહે, અને મરજી પ્રમાણે એક action); અને pub.dev પરનું fluttertoast package જેમને જોઈએ એમને Android જેવા તરતા toasts આપે છે. વિકલ્પ A એવું API ઉપજાવી કાઢે છે જે છે જ નહીં: આ એ વિદ્યાર્થીઓ માટેનો ફાંદો છે જે માની લે છે કે Android ના દરેક નામનું Flutter માં જોડિયું હશે જ. વિકલ્પ C નિષ્ક્રિય જાણને થોભાવીને પુછાતા સવાલ સાથે ભેળવી દે છે: ગયા પાઠમાં બરાબર એ જ રેખા દોરી હતી. વિકલ્પ D બે જુદી વસ્તુઓને એક કરી નાખે છે: એક એ widget છે જે Flutter આપે છે, અને બીજું એ ખ્યાલ છે જે એણે જાણી જોઈને નથી આપ્યો.
Think first
Switch કે checkbox? ચાર હરોળ પર ચુકાદો આપો
FestConnect Flutter ની screens માંથી ચાર હરોળ: (a) Settings માં Event reminders ચાલુ કે બંધ, (b) નોંધણીના form પર 'હું fest ના નિયમો સ્વીકારું છું', (c) Settings માં Dark mode, (d) booking ના form પર 'થેલી ઉમેરો'. વચન પ્રમાણે દરેકને switch કે checkbox સોંપો, અને પછી tap કરો.
Show the answer
(a) અને (c): switches, કારણ કે એ એવાં settings છે જે બદલાય એ જ ક્ષણે અમલમાં આવે છે, અને એમાં submit કરવાની કોઈ વિધિ હોતી નથી. (b) અને (d): checkboxes, કારણ કે એ એવી પસંદગીઓ છે જેનો ત્યાં સુધી કોઈ અર્થ નથી જ્યાં સુધી form નું Book કે Register બટન એમને submit ન કરે. કસોટી એક જ પ્રશ્નમાં આવી જાય છે: એ બદલવાથી અત્યારે જ કંઈ થાય છે, કે એ પછીથી submit થનારી કોઈ વસ્તુનો ભાગ છે? એ જ bool, એ જ setState: widget ની પસંદગી તો સમય વિશેનો સંદેશો છે, અને એમને ભેળવી નાખવાથી (form પર switch, settings માં checkbox) દરેક platform પર users ચૂપચાપ ગૂંચવાય છે.
Watch out
પસાર થતા સંદેશાની ભૂલો
Snackbars ખડકી દેવા: એકસાથે ઘણા છોડો તો દરેક પોતાની થોડી ક્ષણો માટે કતારમાં ઊભા રહે છે; ચાલુ snackbar ને પહેલાં હટાવીને (hideCurrentSnackBar) પછી showSnackBar કરવાથી સમાચાર તાજા રહે છે.
SnackBar માં અગત્યની માહિતી: એ જાતે જ જતું રહે છે, એટલે જેના પર user એ કંઈક કરવું જ પડે એવી વાત dialog માં હોવી જોઈએ; ફક્ત જાણવા જેવી વાત પસાર થઈ જાય તો ચાલે.
એવું UNDO જે ખરેખર પાછું વાળી ન શકે: action આપો એટલે એને અમલમાં મૂકવાની જવાબદારી પણ આવે છે: ખભા ઉલાળતું UNDO તો ન હોય એના કરતાં પણ ખરાબ છે.
Theory
ખલેલનો આખો પટ પૂરો
હવે તમારી પાસે user સાથે વાત કરવાનો Flutter નો આખો પટ છે: Tooltip માગો ત્યારે ધીમેથી કહે છે, SnackBar જતાં જતાં ઉલ્લેખ કરે છે, અને AlertDialog થોભાવીને પૂછે છે: સમાચાર જેટલી માગણી કરે એટલું જ ઉપર ચડો (BCA404 વાળી ErrorProvider સામે MsgBox ની સૂઝ, જે છેવટે બધા platforms પર લાગુ પડે છે). આખા વિષયમાં હવે એક જ પાઠ બાકી છે: charts અને Form widget, એટલે કે FestConnect Flutter ની નોંધણી, ચકાસાયેલી અને પૂરી.
Summary
Key takeaways
- Flutter માં Toast આવતું જ નથી: એ સ્પષ્ટ કહો; SnackBar એનો પોતાનો પસાર થતો સંદેશો છે, અને fluttertoast એ package વાળો રસ્તો છે.
- ScaffoldMessenger.of(context).showSnackBar(SnackBar(content, duration, action)): નીચેની પટ્ટી, જે જાતે જ જતી રહે છે.
- SnackBarAction એક tap માં થતું UNDO આપે છે, જે toast પાસે કદી નહોતું.
- Switch: value અને onChanged અને setState: controlled નિયમનો ચોથો સાક્ષી; હરોળ માટે SwitchListTile.
- Switch એટલે અત્યારે જ અમલમાં આવતું setting; checkbox એટલે પછીથી submit થતી પસંદગી: એ જ bool, પણ વચન જુદું.
- ખલેલને પ્રામાણિકતાથી જ વધારો: tooltip, snackbar, dialog.
- યાદ રાખવાની કડી: snackbars પસાર થઈ જાય છે, switches અત્યારે જ કામ કરે છે, અને અહીં કોઈ toast વસતું નથી.