և հասկանալ, թե ինչու է Flutter-ն այդքան հիանալի:
Այս բլոգում մենք կսովորենք, թե ինչպես օգտագործել Flutter-ը՝ ստեղծելու ձեր առաջին իրական աշխարհի խաչմերուկային կողմնացույց հավելվածը: Այսպիսով, եկեք սուզվենք դրա մեջ: 🚀
Այս բլոգի կոդը — LiquidatorCoder/nord (github.com)
Flutter-ի ներածություն
Flutter-ը Google-ի կողմից բաց կոդով շրջանակ է՝ գեղեցիկ, բնիկ կերպով կազմված, բազմահարթակ հավելվածներ ստեղծելու համար մեկ կոդի բազայից: Դա բավականին հեշտ է կարգավորել և գործարկել:
Սկսելու համար այցելենք Տեղադրել | Flutter և ներբեռնեք Flutter մեր օպերացիոն համակարգի համար: Ես օգտագործում եմ Windows համակարգիչ, ուստի կընտրեմ Windows-ը և այնուհետև կներբեռնեմ վերջին Flutter SDK-ն՝ սեղմելով հաջորդ էջի կապույտ կոճակը:
Հաջորդը, մենք հետևում ենք տեղադրման ուղեցույցի քայլերին և թարմացնում մեր միջավայրի ուղու փոփոխականները: Այնուհետև մենք գործարկում ենք flutter doctor
-ը տերմինալում՝ ստուգելու, որ Flutter-ի տեղադրման գործընթացը ավարտված է:
Հաջորդը, մենք տեղադրում ենք Android Studio-ն՝ հետևելով այստեղ տրված քայլերին: Սա պետք է տևի ընդամենը մի քանի րոպե:
Դրանից հետո մենք վերջապես պատրաստ ենք կառուցել մեր հիանալի կողմնացույց հավելվածը Flutter-ում:
Ստացեք ոգեշնչում
Նախքան Flutter-ի հետ իրական ծրագրավորման մեջ մտնելը, եկեք տեսնենք որոշ կողմնացույց հավելվածներ, որոնք հասանելի են առցանց, չէ՞:
Այսպիսով, ես արագ փնտրեցի compass app UI
google-ը և գտա մեր հավելվածի ճակատային մասի հիանալի ձևավորում:
Նշում — Քանի որ սա սկսնակների համար նախատեսված ձեռնարկ է, ես ձեզ խորհուրդ կտայի սկսել՝ հետևելով այլ մարդկանց UI-ներին, քանի որ UI դիզայնը դուրս է այս ձեռնարկի շրջանակներից:
Թեև երկրորդը դժոխք է (փառք Offriginal-ին), այնուամենայնիվ, ես որոշեցի գնալ առաջինի հետ, քանի որ այն մի փոքր ավելի պարզ է և նվազագույն (փառերը Marc Merle-ին):
Եկեք կոդավորենք
Այսպիսով, եկեք սկսենք ստեղծելով Flutter նախագիծ՝ օգտագործելով Flutter create հրամանը: Ես պատրաստվում եմ այս հավելվածին անվանել nord
, քանի որ այն հիանալի է թվում: Ազատորեն անվանեք այն, ինչ ցանկանում եք:
flutter create --org com.abhay nord
Նաև արագ բոնուսային հուշում -› Ես ավելացրել եմ — org com.abhay
պարամետրը ստեղծելու հրամանին՝ կազմակերպության անունը մեր մեկնարկային հավելվածում ավելացնելու համար: Սա օգնում է ստեղծել եզակի հավելվածի ID մեր հավելվածի համար, ինչպես այս դեպքում com.abhay.nord
:
Հաջորդը, մենք կբացենք նախագիծը մեր ընտրած IDE-ի ներսում, որն իմ դեպքում VS Code-ն է: Եթե ցանկանում եք ստեղծել VS Code ձեր Flutter նախագծերի համար, կարող եք հետևել այստեղ նշված քայլերին: Մենք նաև նախաստորագրելու ենք git-ը մեր նախագծի ներսում, քանի որ այն օգնում է նախագծի պահպանմանը:
cd nord git init . code . ; exit
Նախնական քայլեր
Նախքան կոդավորումը սկսելը, եկեք նայենք նախագծի գրացուցակի կառուցվածքին:
├───.gitignore ├───.metadata ├───.packages ├───analysis_options.yaml ├───nord.iml ├───pubspec.lock ├───pubspec.yaml ├───README.md │ │ ├───android/ │ ├───ios/ │ ├───lib │ main.dart │ ├───test │ widget_test.dart │ ├───web/ │ └───windows/
Լռելյայնորեն, մեր ամբողջ Dart կոդը (որը, ի դեպ, ծրագրավորման լեզուն է, որը մենք կօգտագործենք այս հավելվածը մշակելիս 😊) գտնվում է lib գրացուցակում: Մեր հավելվածի հիմնական մեկնարկային կետը main.dart
ֆայլն է:
Քանի որ Flutter-ը հավելվածներ է ստեղծում Android-ի, iOS-ի, Web-ի, Windows-ի և այլնի համար, պլատֆորմների նույն անունով գրացուցակները պարունակում են վերջիններիս կազմաձևման կոդը: Օրինակ, android
գրացուցակը պարունակում է Kotlin կոդը հիմնական գործունեության համար, Gradle ֆայլեր, հավելվածների պատկերակներ և հավելվածի այլ ռեսուրսներ:
Այժմ եկեք գործարկենք այս մեկնարկային նախագիծը: Հենց հիմա ես օգտագործում եմ ֆիզիկական սարք (այս դեպքում՝ իմ Android հեռախոսը)՝ հավելվածը ստեղծելու և վրիպազերծելու համար, բայց դուք կարող եք նաև օգտագործել վիրտուալ էմուլյատոր: Միացրեք ձեր սարքը ձեր համակարգչին, այնուհետև օգտագործեք Flutter run հրամանը՝ հավելվածի վրիպազերծման տարբերակը ստեղծելու համար:
flutter run
Հաջորդը, մենք կհեռացնենք main.dart
ֆայլի ներսում եղած բոլոր մեկնաբանությունները: Մենք նաև կհեռացնենք MyHomePage
դասը և դրա օրինակը MyApp դասի ներսում կփոխարինենք Container-ով (հիմնական վիջեթ, որը տրամադրվում է Flutter շրջանակի կողմից):
Ձեր հավելվածն այժմ պարզապես պետք է ցույց տա սև էկրան: Մի անհանգստացեք, մենք շուտով դա կշտկենք:
Բայց մինչ այդ, մենք պետք է ստեղծենք որոշ դիրեկտորիաներ մեր lib
գրացուցակում:
Դրանք կօգնեն մեզ առանձնացնել մեր բիզնես տրամաբանությունը մեր հավելվածի միջերեսից:
Այժմ մենք կարող ենք սկսել աշխատել մեր կողմնացույցի տվյալների ծառայության և վերահսկիչի վրա, որը մեզ կտրամադրի իրական ժամանակի կողմնացույցի տվյալները մեր դիտումներում:
Սպասարկում և վերահսկիչ
Եկեք սկսենք ավելացնելով flutter_compass
plugin-ը մեր նախագծին, որը կօգնի մեզ ստանալ կողմնացույցի տվյալները սարքի սենսորներից:
Եթե դուք օգտագործում եք VS Code, ապա կարող եք օգտագործել Command Palette՝ կախվածությունները ավելացնելու համար: Հրամանների պալիտրա մուտք գործելու համար սեղմեք Ctrl+Shift+P
ստեղնաշարի վրա: Այլապես, դուք կարող եք մուտք գործել այն View
մենյուից:
Այստեղ մենք կօգտագործենք Dart: Add Dependecy
հրամանը՝ flutter_compass
կախվածությունը ավելացնելու համար:
Սա ավելացնելուց հետո մենք կարող ենք տեսնել, որ մեր pubspec.yaml
ֆայլը թարմացվել է:
Այս plugin-ի տեղադրումն ավարտելու համար մենք պետք է որոշ թույլտվություններ ավելացնենք մեր AndroidManifest.xml
ֆայլի ներսում մեր android նախագծի հիմնական գրացուցակի ներսում, ինչպես նշված է այստեղ:
Նշում — Այս քայլից հետո մենք պետք է վերակառուցենք մեր նախագիծը, որպեսզի այս թույլտվությունները կարողանան ավելացնել մեր հավելվածի ներսում:
Հաջորդը, մենք ստեղծում ենք ծառայություն կողմնացույցի տվյալների համար: Դա անելու համար մենք services
գրացուցակում ստեղծում ենք compass_service.dart
անունով ֆայլ: Այս ֆայլի ներսում մենք ստեղծում ենք դաս, որը կոչվում է CompassService
: Այս դասը կծառայի որպես մեր հավելվածի մեր կողմնացույցի տվյալների հիմնական տվյալների ծառայություն:
Մենք նաև կստեղծենք ստացող՝ ընթացիկ կողմնացույցի տվյալների հոսքը ստանալու համար: Եթե դուք ծանոթ չեք Dart-ում ստացողներին և սեթերներին, ապա պետք է ստուգեք այս բլոգը:
import 'package:flutter_compass/flutter_compass.dart'; class CompassService { // Getter to get current heading data stream Stream<double?>? get compassHeadingStream { return FlutterCompass.events?.map((event) => event.heading); } }
Հաջորդը, մենք կավելացնենք ստացող կողմնացույցի ուղղության համար, որը մեզ ցույց է տալիս կողմնացույցի ուղղությունը:
// Getter to get current heading direction stream Stream<String>? get compassDirectionStream { return FlutterCompass.events?.map((event) { final heading = event.heading ?? 0; if (heading >= 0 && heading <= 22.5 && heading >= 337.5) { return 'N'; } else if (heading > 22.5 && heading <= 67.5) { return 'NE'; } else if (heading > 67.5 && heading <= 112.5) { return 'E'; } else if (heading > 112.5 && heading <= 157.5) { return 'SE'; } else if (heading > 157.5 && heading <= 202.5) { return 'S'; } else if (heading > 202.5 && heading <= 247.5) { return 'SW'; } else if (heading > 247.5 && heading <= 292.5) { return 'W'; } else if (heading > 292.5 && heading <= 337.5) { return 'NW'; } else { return 'N'; } }); }
Դասարանում ես նաև մի քանի ռեֆակտորինգ արեցի՝ մի փոքր մաքրելու համար:
Այժմ մենք կստեղծենք վերահսկիչ, որը տվյալները կտրամադրի դիտումներին: Այս կարգավորիչը ստեղծելու համար մենք controllers
գրացուցակում ստեղծում ենք compass_controller.dart
անունով ֆայլ: Այս ֆայլում մենք ստեղծում ենք դաս, որը կոչվում է CompassController
: Մենք նաև ավելացնում ենք ChangeNotifier
mixin-ը մեր դասարանում՝ with հիմնաբառով: Միքսների և with հիմնաբառի մասին ավելին իմանալու համար այցելեք այս էջը: Մենք ավելացրել ենք ChangeNotifier
mixin-ը, որպեսզի կարողանանք օգտագործել notifiyListeners
մեթոդը՝ թարմացնելու մեր տեսքը, երբ տվյալները փոխվում են:
Մի անհանգստացեք, եթե դուք շատ բան չգիտեք այս պայմանների կամ պետական կառավարման մասին, բայց հիշեք, որ սա ոչ միայն օգնում է պահպանել մեր կոդը մաքուր և պահպանելի, այլ նաև նվազեցնում է անհարկի կառուցումների կամ հիշողության արտահոսքի ռիսկը:
Հաջորդը, մենք կբացահայտենք ծառայության տվյալները վերահսկիչի ներսում՝ լսելով դասի կոնստրուկտորի ներսում հոսքերը:
Մենք նաև ավելացնում ենք dispose
մեթոդը և չեղարկում հեռարձակման այս բաժանորդագրությունները՝ հեռարձակումը լսելուց հետո օգտագործված ռեսուրսներն ազատելու համար:
Այս dispose
մեթոդը նույնպես անտեսում է ChangeNotifier
mixin-ի համանուն մեթոդը:
Վերջապես, մենք կարող ենք սկսել աշխատել մեր հավելվածի դիտումների (էկրանների) վրա։
Դիտումներ
Նշում — Քանի որ հետագա քայլերը կպահանջեն կոդի զգալի քանակություն, ես խորհուրդ եմ տալիս բացել այս նախագծի կոդային ֆայլերը GitHub-ում այստեղից և հետևել commit by commit կոդը:
Այսպիսով, առաջին հերթին եկեք ստեղծենք գլխավոր էջ: Ստեղծեք նոր ֆայլ home_page.dart
pages
գրացուցակում և այնուհետև դրանում ավելացրեք քաղաքացիություն չունեցող վիջեթ HomePage
:
Վիջեթների մասին լրացուցիչ տեղեկությունների համար այցելեք այս էջը:
Այս վիջեթի կառուցման մեթոդում մենք առայժմ կվերադարձնենք փայտամած վիջեթը: Հաջորդը, մենք կավելացնենք այս վիջեթը MyApp
քաղաքացիություն չունեցող վիջեթի կառուցման մեթոդին, որպեսզի կարողանանք սկսել աշխատել գլխավոր էջում:
Եկեք սկսենք մեր փայտամածին ֆոն ավելացնելով: Մենք կավելացնենք շառավղային գրադիենտ, որի գույներն ընտրել ենք նախկինում ընտրված UI դիզայնից:
Հաջորդը, մենք ցանկանում ենք ցույց տալ մեր կողմնացույցի ընթերցումները էկրանի կենտրոնում:
Դրա համար մենք ավելացնում ենք provider
փաթեթը, որպեսզի օգտագործենք վերահսկիչի արժեքները՝ տեսքը թարմացնելու համար: Եթե ցանկանում եք ավելին իմանալ provider
-ի մասին, խորհուրդ եմ տալիս դիտել այս զարմանալի տեսանյութը Code-ից Անդրեայի հետ:
Ավելացրե՛ք provider
փաթեթը այնպես, ինչպես ավելացրեցինք flutter_compass
փլագինը:
Այժմ մենք ավելացնում ենք MultiProvider
վիջեթը main.dart
ֆայլի runApp
մեթոդում: Սա ապահովում է, որ կարգավորիչը հասանելի է մեր վիջեթի ծառում:
Հաջորդը, մենք կօգտագործենք այս կարգավորիչը՝ home_page.dart
-ում մեր տվյալները ստանալու համար: Դրա համար մենք նախ կստանանք CompassController
-ի օրինակ:
Դրա համար ավելացրեք հետևյալ տողը HomePage
վիջեթի կառուցման մեթոդի ներսում:
final CompassController _compassController = context.watch<CompassController>();
Այնուհետև մենք կարող ենք օգտագործել այս _compassController
-ը տվյալների արժեքներ ստանալու համար և կարող ենք դրանք ցուցադրել Text
վիջեթի միջոցով:
Text('${_compassController.compassHeading} ${_compassController.compassDirection}', ),
Վա՜յ 🎉 Մենք այժմ ունենք աշխատող հավելված:
Բայց դա լավ տեսք չունի 🤔։ Եկեք դա շտկենք:
Նախ, եկեք մեր էջին ավելացնենք կողմնացույցի մարմինը: Դա անելու համար ես ավելացրի մի փունջ SVG պատկերներ (հղում) և ֆոն՝ օգտագործելով CustomPainter
, որը (դուք կռահեցիք) վիդջեթ է: Ես չեմ մանրամասնի այս CustomPainter
վիջեթի մասին, քանի որ այն դուրս է այս ձեռնարկի շրջանակներից, բայց դուք կարող եք ավելին կարդալ CustomPainter
-ի մասին այստեղ, ինչպես նաև ստուգել այս նախագծի սկզբնական կոդը GitHub-ում:
Նշում — SVG ֆայլերն օգտագործելու համար ես ավելացրեցի
flutter_svg
փաթեթը և ավելացրեցի այս SVG ֆայլերը որպես հաստատուն տողերի կոդ, որը կարող է մեկնաբանվելflutter_svg
փաթեթով: Լրացուցիչ տեղեկություններ — այստեղ:
Այս վեկտորային պատկերները ավելացնելուց հետո UI-ն այսպիսի տեսք ունի.
Թարմացում — Ես այս SVG-ները փոխարինեցի PNG-ներով, քանի որ դրանցից ոմանք պահանջում էին SVG զտիչներ, որոնք ներկայումս չեն աջակցվում
flutter_svg
-ի կողմից: PNG պատկերներ ավելացնելու համար մենք նախ պետք է դրանք ավելացնենք մերpubspec.yaml
ֆայլում՝ որպես ակտիվներ, այնուհետև կարող ենք օգտագործելImage.asset
վիջեթը՝ դրանք մեր հավելվածում օգտագործելու համար: Լրացուցիչ տեղեկություններ — այստեղ:
Լավ, սա լավ տեսք ունի, բայց հավելվածը դեռևս ինտերակտիվ չի զգում, քանի որ ներկայումս թարմացվում է միայն ուղղորդող տեքստը: Կարծում եմ, որ հավաքիչը նույնպես պետք է պտտվի և արձագանքի կողմնացույցի ուղղության փոփոխությանը: Եկեք ավելացնենք այս հիանալի փոխազդեցությունը բոնուսային անիմացիայի հետ:
Դրա համար մենք կավելացնենք AnimatedRotation
վիջեթը որպես ծնող մեր կողմնացույցի համարին: Այս վիջեթը վերցնում է turns
և duration
որպես պահանջվող պարամետրեր: turns
թույլ է տալիս մեզ նշել ընթացիկ ռոտացիան, և duration
-ը վերցնում է անիմացիայի տևողության տևողությունը:
Ծանոթագրություն —
turns
պարամետրն ընդունում է ընթացիկ ռոտացիան որպես մի շարք պտույտներ, ուստի մենքcompassHeading
-ը կբաժանենք 360-ի: Բացի այդ,??
-ը տեգերում եթե զրոյական օպերատորն է, որը մենք օգտագործել ենք՝ նշելու պտույտները, երբcompassHeading
-ը զրոյական է: ._screenHeight
-ը և_screenWidth
-ը պարզապես օգտագործվում են լայնությունը և բարձրությունը որպես սարքի էկրանի չափի մաս նշելու համար: Լրացուցիչ տեղեկություններ — այստեղ:
Վայելա Մեր հավելվածը պատրաստ է:
Շենքի թողարկման հավելվածների ստեղծում
Վերջնական android հավելված ստեղծելու համար (որը մենք կարող ենք գործարկել մեր android սարքերում), գործարկեք հետևյալ հրամանը.
flutter build apk --split-per-abi
Սա ստեղծում է բազմաթիվ apk
ֆայլեր մեր հավելվածի համար: Կարդալ ավելին այստեղ:
Մենք կարող ենք նաև ստեղծել «ճարպային apk», որն աջակցում է Android-ի բոլոր ճարտարապետությունները, բայց չափերով զգալիորեն մեծ է՝ գործարկելով.
flutter build apk
Android հավելված ստեղծելու համար գործարկեք հետևյալ հրամանը.
flutter build appbundle
iOS և macOS հավելվածներ ստեղծելու համար մենք պետք է flutter-ը տեղադրենք Mac սարքի վրա:
iOS-ի համար ստեղծելու համար գործարկեք —
flutter build ipa
Նշում. Քանի որ
flutter_compass
հավելվածն աջակցում է միայն Android-ին և iOS-ին, այլ հարթակների համար նախատեսված կառուցվածքները ճիշտ չեն աշխատի և չեն ցուցադրի կողմնացույցի ընթերցումը:
Windows-ի հավելված ստեղծելու համար գործարկեք
flutter build windows
MacOS-ի համար ստեղծելու համար գործարկեքflutter build macos
Նշում — Դուք պետք է ակտիվացնեք Flutter-ի աշխատասեղանի աջակցությունը՝ նախ գործարկելով
flutter config --enable-windows-desktop
-ը ևflutter config --enable-macos-desktop
այնուհետև կաշխատեն միայն վերը նշված հրամանները: Կարդալ ավելին այստեղ:
Այս հավելվածի կոդը GitHub-ում — https://github.com/LiquidatorCoder/nord
Ինչու՞ է Flutter-ն այդքան հիանալի:
Այսպիսով, վերջապես մենք դա գիտենք: Flutter-ը հիասքանչ է, քանի որ մենք կարողացանք ստեղծել խաչաձև հարթակ, իրական աշխարհի հավելված՝ պահպանվող և մասշտաբային կառուցվածքով մեկ օրվա ընթացքում, եթե ոչ ժամերի ընթացքում: Մենք կարողացանք մի քանի առանձնահատկություններ ավելացնել մեր հավելվածին՝ Flutter համայնքի մի քանի հիանալի «pub.dev» փաթեթների օգնությամբ: Հավելվածն աշխատում է գրեթե բնիկ կատարողականությամբ, և մենք կարիք չունենք անհանգստանալու երկար բեռնման ժամանակի համար:
Դա փաթաթված է:
վերջ Շնորհակալություն կարդալու համար: Չմոռանաք հետևել ինձ Twitter կամ GitHub՝ Flutter-ի ավելի հիանալի խորհուրդների և հնարքների համար:
Կտեսնվենք! 👋🏻
Twitter — Abhay Maurya 💙 (@LiquidatorAB) / Twitter
GitHub — LiquidatorCoder (Abhay Maurya) (github.com)