Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ Flutter ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π°ΠΊΡΠΈΠ²ΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π°ΠΊΡΠΈΠ²Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Ρ ΠΎΡ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π°Π½Π°Π»ΠΈΠ·Π° (ΠΈΠ»ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ/ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ).
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌ ΡΠ±ΠΎΠ΅ΠΌ Posse Π² ΠΈΡ ΠΆΠΈΠ²ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ±ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΡΠΎΠΊΠΈ Π°ΠΊΡΠΈΠ²Π°.
Π£ Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ ΡΡΡΠ½ΠΎΠΉ ΡΠ°ΠΉΠ» ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈΠ· ΡΠ²ΠΎΠ΅Π³ΠΎ pubspec.yaml (ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»Π΅Π³ΠΊΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ).
ΠΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π·Π΅Ρ, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠΌΠΎΡΡ. ΠΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΡΠ²ΡΠ·Π°Π½Π° Ρ ΠΏΠΎΠΈΡΠΊΠΎΠΌ ΠΈΠ΄Π΅ΠΉ ΠΏΠΎ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΡΠ±ΠΎΠ΅Π².
Π Π²Π°ΡΠ΅ΠΌΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ @yjbanov
ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΈΠΌΠ΅Π½ Π°ΠΊΡΠΈΠ²ΠΎΠ² ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π² ΡΡΠΎΠΌ ΡΠΎΠ΄Π΅.
Π― Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΡΠ΅ΠΌΠ»ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΡΠΎ, Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ» ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π΄ΡΠΌΠ°Π΅Ρ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ»Π°ΡΡΠ΅ΡΠ°. ΠΠΎΠΉ POC Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ Π±Π΅ΡΠ°-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π― ΠΏΡΠΈΠ΄ΡΠΌΠ°Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΡΡΠΉ MVP, ΡΡΠΎΠ±Ρ ΡΡΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±ΡΡΡ ΠΏΠΈΠ°ΡΠΎΠΌ. Π‘ΠΊΠΎΡΠΎ (Π’Π).
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ:
Π― ΡΠ»Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Fly-Mix ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ NetEase. ΠΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ»Π°ΡΡΠ΅ΡΠ°: Flr(Flutter-R)
Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅.
Flr
β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΡΠ»Π°ΡΡΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΠ»Π°ΡΡΠ΅ΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π°ΠΊΡΠΈΠ²Ρ Π² pubspec.yaml
ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ» r.g.dart
, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΠ±ΠΈΡ R.java
Π² Android ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ»Π°ΡΡΠ΅ΡΠ°. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ r.g.dart
ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ»Π°ΡΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π°ΠΊΡΠΈΠ² Π² ΠΊΠΎΠ΄Π΅, ΡΡΡΠ»Π°ΡΡΡ Π½Π° Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π°ΠΊΡΠΈΠ²Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
import 'package:flutter_r_demo/r.g.dart';
// test_sameName.png
var normalImageWidget = Image(
width: 200,
height: 120,
image: R.image.test_sameName(),
);
// test_sameName.gif
var gifImageWidget = Image(
image: R.mage.test_sameName_gif(),
);
// test.svg
var svgImageWidget = Image(
width: 100,
height: 100,
image: R.svg.test(width: 100, height: 100),
);
// test.json
var jsonString = await R.text.test_json();
// test.yaml
var yamlString = await R.text.test_yaml();
PS: Π΄Π°, ΡΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° AAPT (Android Asset Packaging Tool) Π² Android.
ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ Flr ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π» ΠΏΠ»Π°Π³ΠΈΠ½ Android Studio, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ VSCode:
ΠΠ΅ΡΡΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° Flr Π΄Π»Ρ Android Studio
ΠΠΎΠΌΠ°ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π°: https://plugins.jetbrains.com/plugin/13789-flr
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ flr-as-plugin Gif:
ΠΠ΅ΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Flr
ΠΠΎΠΌΠ°ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ: https://rubygems.org/gems/flr
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ flr-cli Gif:
ΠΠ΅ΡΡΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Flr VSCode
ΠΠΎΠΌΠ°ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ: https://marketplace.visualstudio.com/items?itemName=LincolnLaw.flr
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ flr-vscode-extension: