Flutter Dev | Uzbekistan 🇺🇿
401 subscribers
574 photos
68 videos
25 files
401 links
Flutter bu - hozirgi kundagi eng yetuk kross platformali dasturlash vositasidir!

Bu kanal Flutterning o'zbek zabon vakillari uchun.

Blog avtori:
© Muhammad Aziz (@mamasodikoff)

🥛 Ayron olib bering: tirikchilik.uz/cosmos

- Web sayt: flutterdev.uz
Download Telegram
Срочно! Macbook M3 Pro 14'' 18/512

🍏 Macbook M3 Pro 14'' #m3pro #mac
📟 RAM: 18GB
💾 SDD: 512 GB
💻 Rangi: Space Black
💵 $1359

Xolati ideal, garantiyasi tugaganiga hali 1 oy bo'lmadi. Ko'p ishlatilmagan.
Faqat chexolda ishlatilgan. Ekranida steklo zashitnik bor.

🔋Batareya: 75 sikl | 100 %

Karobka dokument, komplektda hamma narsasi bor.

(Obmen va bo'lib to'lash yo'q)

Kontakt: @successisnotfinal
🔥21👍1
Ibrohimbek Davronov:

Har bir mobile dasturchi push notification bilan ishlashga to'g'ri keladi... 🤔

Lekin ko'p hollarda:
Dokumentatsiya tarqoq
Setup jarayoni chalkash
Platform-specific issues ko'p

Shu sababli do'stim Hayotbek 🇵🇸 bilan birgalikda Flutter uchun to'liq, step-by-step qo'llanma yaratdik! 📚

Qamrab olingan mavzular:
🔹 Firebase Cloud Messaging integratsiyasi
🔹 Android va iOS uchun alohida sozlamalar
🔹 Token management
🔹 Notification handlers (background/foreground/terminated)
🔹 Postman collection bilan testing
🔹 Real-world kod namunalari

Maqsad oddiy: yangi boshlovchilar uchun ham, tajribali dasturchilar uchun ham foydali reference yaratish.

🔔 Notification haqida keyingi postlarni kuting!

Fikrlaringizni izohlarda qoldiring 💬

Documentation Link: https://lnkd.in/dF4WXduk

Manba: https://www.linkedin.com/posts/ibrohimbek-davronbekov_flutterdevelopment-firebase-pushnotifications-activity-7387828098001612800-mhto

@flutterdevuz
👍4🔥4
Yaxshi yondashuv,

Baʼzilar UI qurishni, vidjetlar chizishni juda yaxshi koʻradi, xar xil animatsiyalar bilan ishlashni sevadi.

Baʼzilar esa... Ular biznes logika, statelarni boshqarish, xabarnomalarni konfiguratsiya qilish yoki metod kanallar va izolyatlar bilan platformalardan maʼlumot olib chiqishni ustasi.

Natijada: "Near Perfect" ilova tayyor!

@flutterdevuz
Forwarded from Android Broadcast
‼️ Google и Epic Games решили пойти на мировую — грядет серьёзные изменения в Google Play для разработчиков

Google и Epic Games, которые уже несколько лет судятся из-за монополий на рынке мобильных приложений (а Epic параллельно ведёт дела и с Apple, и с Samsung), наконец подготовили мировое соглашение и передали его судье.

Полный текст пока не опубликован, но уже известны ключевые пункты:
👉 Комиссия Google Play снизится — от 9% до 20% в зависимости от типа транзакции
👉 Разработчики получат больше свободы в распространении приложений
👉 Оплата в приложениях из Google Play станет возможной через сторонние платёжные системы

Тим Свини (CEO Epic Games) назвал это укреплением «изначальной концепции Android как открытой платформы» (пост в X).

Думаю, что эти изменения будут действовать только в США,
но Свини утверждает, что Epic «намерена распространить их по всему миру». Ждём подробностей после утверждения соглашения судом.

Источник: Android Authority

#googleplay #epic #android #google
🔥2👍1
Forwarded from Pressuzb
Ўзбекистонда Apple Pay ва Google Pay тўлов тизимлари ишга тушади

Вашингтон шаҳрига амалий ташрифнинг ишбилармонлик дастури якунида Президент Шавкат Мирзиёев АҚШнинг етакчи компаниялари, инвестиция фондлари ва молия институтлари вакиллари билан учрашув ўтказди.

Эътиборлиси, Ўзбекистонда Apple Pay ва Google Pay тўлов тизимларини жорий этиш, Рақамли академия ва стартап-хаблар тармоғини яратиш режалари ҳам очиқланди.

Бундай лойиҳаларни илгари суриш ва молиявий қўллаб-қувватлаш учун DFC корпорацияси ҳамда АҚШ Эксимбанки жалб қилинади.

@pressuzb
👏3👌1
Forwarded from Templates
Требуется: Senior/Strong Middle Flutter Developer (с характером, скоростью и желанием делать крутые вещи)

Мы ищем не просто разработчика, а человека, который живет мобильной разработкой, чувствует архитектуру, как музыку, и не терпит медлительности. Ты должен уметь принимать решения, быстро собирать, тестировать, запускать - и делать это красиво.

Что нужно уметь:
- Уверенный, глубокий опыт разработки на Flutter (от 3 лет).
- Отличное знание Dart, архитектур (BLoC, Provider, Clean Architecture).
- Умение быстро собирать сложные UI, работать с анимациями и кастомными виджетами.
- Работа с API, интеграции, JSON, REST, WebSockets.
- Понимание CI/CD, пайплайнов, Git flow.
- Навыки оптимизации производительности приложений.
- Опыт работы с Firebase - плюс.
- И самое главное - инициатива, скорость, ответственность. Мы ищем того, кто - ненавидит медленную работу и любит добиваться результата.

Будет круто, если ты:
- Разбираешься в нативных частях (Android/iOS).
- Участвовал в релизах крупных продуктов.
- Легко читаешь чужой код и приводишь его в порядок.
- Можешь предложить решение, а не ждать ТЗ на 10 страниц.

Задачи:
- Разработка новых функциональностей в наших AI-продуктах.
- Интеграции с backend (FastAPI / Django), работа с API.
- Участие в архитектуре и планировании.
- Быстрые прототипы новых фич и экспериментов.
- Оптимизация, поддержка и развитие текущих приложений.

Условия:
- Полная занятость, офис (Ташкент).
- Конкурентная заработная плата на уровне Senior / Strong Middle.
- Оплата - от $1500 (точная сумма определяется по результатам интервью).
- Работа в AI-команде, где ценят скорость, инициативу и результат.
- Проекты, которые реально запускаются, а не лежат в папке “идея”.

Как откликнуться:
📩 Telegram: @AIBA_hr

Покажи портфолио, GitHub или пару своих топовых проектов - мы любим сильных разработчиков, которые разговаривают результатами, а не словами.
🔥5👍43🆒1
Flutter Dev | Uzbekistan 🇺🇿
Video
Flutterda shunday Bottom Navigation Bar yasash uchun nima qilgan bo'lar edingiz?

Bu kodda render objectlar ishlatilgan. Lekin o'zingiz soddaroq shaklda oddiy kalkulyatasiyalardan foydalanib ham qilishingiz mumkinmi? Agar ha bo'lsa, izohlarda kodlar bilan bo'lishing.

Bu yerda men ushbu widget kodlari va kodlarga ChatGPT ni qatorma-qator tushuntirishini keltirib o'taman:


To'liq kod:
import 'package:base/utils/app_constants.dart';
import 'package:flutter/material.dart';

class BottomNavCustom extends StatefulWidget {
final List<IconData> icons;
final Function(int) onItemSelected;
final Color backgroundColor;
final Color selectedCircleColor;
final Color selectedIconColor;
final Color unselectedIconColor;

const BottomNavCustom({
super.key,
required this.icons,
required this.onItemSelected,
this.backgroundColor = Colors.white,
this.selectedCircleColor = Colors.white,
this.selectedIconColor = cFirstColor,
this.unselectedIconColor = Colors.white,
});

@override
State<BottomNavCustom> createState() => _BottomNavCustomState();
}

class _BottomNavCustomState extends State<BottomNavCustom> {
int _selectedIndex = 0;
final List<GlobalKey> _iconKeys = [];

@override
void initState() {
super.initState();
_iconKeys.addAll(List.generate(widget.icons.length, (_) => GlobalKey()));
}


double _getIconCenterPosition(int index) {
try {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) setState(() {});
});

final RenderBox? iconBox = _iconKeys[index].currentContext?.findRenderObject() as RenderBox?;
final RenderBox? containerBox = context.findRenderObject() as RenderBox?;

if (iconBox == null || containerBox == null) return 0;

final iconPosition = iconBox.localToGlobal(Offset.zero, ancestor: containerBox);
final iconWidth = iconBox.size.width;
return iconPosition.dx + (iconWidth / 2) - 28; // 28 is half of circle size (56/2)
} catch (e) {
return 0;
}
}

@override
Widget build(BuildContext context) {
const circleSize = 56.0;

return Container(
height: 70,
width: 200,
decoration: BoxDecoration(
color: cFirstColor,
borderRadius: const BorderRadius.all(Radius.circular(50)),
),
child: Stack(
children: [
// Animated white circle background
AnimatedPositioned(
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
left: _getIconCenterPosition(_selectedIndex),
top: 7,
child: Container(
width: circleSize,
height: circleSize,
decoration: BoxDecoration(
color: widget.selectedCircleColor,
shape: BoxShape.circle
),
),
),
// Icons Row
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: List.generate(
widget.icons.length,
(index) => Expanded(
child: GestureDetector(
onTap: () {
setState(() {
_selectedIndex = index;
});
widget.onItemSelected(index);
},
child: Container(
key: _iconKeys[index],
color: Colors.transparent,
child: Center(
child: Icon(
widget.icons[index],
color: _selectedIndex == index
? widget.selectedIconColor
: widget.unselectedIconColor.withOpacity(0.5),
size: 28,
),
),
),
),
),
),
),
],
),
);
}
}
👍1🔥1
Flutter Dev | Uzbekistan 🇺🇿
Flutterda shunday Bottom Navigation Bar yasash uchun nima qilgan bo'lar edingiz? Bu kodda render objectlar ishlatilgan. Lekin o'zingiz soddaroq shaklda oddiy kalkulyatasiyalardan foydalanib ham qilishingiz mumkinmi? Agar ha bo'lsa, izohlarda kodlar bilan…
Tushuntirish (Inglizcha)
Let me explain this function line by line:

```dart
double _getIconCenterPosition(int index) {

Function declaration - Takes an icon's index and returns its center position as a double (pixel value from left edge).

---

try {

Error handling - Wraps code in try-catch because accessing render objects can fail if widgets aren't built yet.

---

WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) setState(() {});
});

Post-frame callback - Schedules a rebuild after the current frame finishes rendering. This ensures that on first build (when positions aren't calculated yet), we trigger another build after layout is complete. mounted checks if the widget is still in the tree before calling setState().

---

final RenderBox? iconBox = _iconKeys[index].currentContext?.findRenderObject() as RenderBox?;

Get icon's RenderBox - A RenderBox is Flutter's low-level rendering object that knows the actual size and position of a widget. This line gets the RenderBox for the specific icon at index using its GlobalKey. The ? makes it nullable in case it doesn't exist yet.

---

final RenderBox? containerBox = context.findRenderObject() as RenderBox?;

Get container's RenderBox - Gets the RenderBox of the entire BottomNavCustom widget (the Stack container). We need this as a reference point.

---

if (iconBox == null || containerBox == null) return 0;

Safety check - If either RenderBox doesn't exist (widget not rendered yet), return 0 as a default position to prevent crashes.

---

final iconPosition = iconBox.localToGlobal(Offset.zero, ancestor: containerBox);

Calculate relative position - This is the KEY line:
- localToGlobal(Offset.zero) converts the icon's local coordinate (0,0 = top-left corner of icon) to a coordinate system
- ancestor: containerBox tells it to calculate position relative to the container (not the entire screen)
- Without ancestor, it would give screen coordinates, causing incorrect positioning
- Result: iconPosition.dx = pixels from container's left edge to icon's left edge

---

final iconWidth = iconBox.size.width;

Get icon width - Retrieves how wide the icon container is in pixels.

---

return iconPosition.dx + (iconWidth / 2) - 28;

Calculate center position:
- iconPosition.dx = distance from container's left to icon's left edge
- + (iconWidth / 2) = add half the icon's width to get to its center
- - 28 = subtract half the circle's size (56/2) so the circle's center aligns with the icon's center
- Returns the left position where the circle should be placed

---

} catch (e) {
return 0;
}

Error fallback - If anything goes wrong (like accessing RenderBox before it exists), safely return 0 instead of crashing.

In summary: This function finds where each icon actually is on screen (relative to the bottom nav container) and calculates where to place the circle so it's perfectly centered under that icon.

#widget #renderObject #widgetTree

@flutterdevuz
Flutter Dev | Uzbekistan 🇺🇿
Shu yerga kichik TweenAnimation qo'yib qo'ysak, Ranglar silliqroq o'zgaradi.
Kod:

Container(
key: _iconKeys[index],
color: Colors.transparent,
child: Center(
child: TweenAnimationBuilder<Color?>(
duration: const Duration(milliseconds: 300),
tween: ColorTween(
begin: widget.unselectedIconColor.withOpacity(0.5),
end: _selectedIndex == index
? widget.selectedIconColor
: widget.unselectedIconColor.withOpacity(0.5),
),
builder: (context, color, _) {
return Icon(
widget.icons[index],
color: color,
size: 28,
);
},
),
),
)
🆒3
Apple har doim apparat va dasturiy ta'minotni AQShda ishlab chiqarishni xohlagan. Uskuna ishlab chiqarishni AQShga qaytarishda qiyinchiliklar yuzaga kelganligi sababli, ular apparat qismlar Kaliforniyada dizaynlangan deb belgilashni boshlashdi. (AQSHda ishlab chiqarish soliqlari va ishchi kuchi qimmat).

Kupertinoda ishlaydigan innovatsion guruhni kengaytirish va e'tiborni yanada jalb qilish uchun ular Mac OS versiyasini Kaliforniya shtatining mashhur joylari bilan nomlashning ushbu yangi tendentsiyasini o'ylab topishdi. Bu Kaliforniya shtati turizmini targ'ib qiladi va boshqa jamoalarni AQShda ishlaydigan jamoa bilan bog'laydi.

Bundan avval MacOS nomlari katta yirtqich "mushuk" lar nomi bilan atalgan.

#apple #macos
@flutterdevuz
👍1
TL;DR;

Macda keshlarni tozalashga One-Liner buyruq (xavfsiz):

curl -fsSL https://raw.githubusercontent.com/jemishavasoya/dev-cleaner/main/dev-cleaner.sh -o dev-cleanup.sh && chmod +x dev-cleanup.sh && ./dev-cleanup.sh


===================

Dasturchilar sifatida barchamiz Mac kompyuterlarimizda "Diskingiz deyarli to'ldi" degan vahimali bildirishnomani ko'rganmiz. Niyatlarimizdan qat'iy nazar, dasturlash ishlari juda ko'p kesh fayllarini yig'adi va diskdan joyni jimgina yeb qo'yadigan artefaktlarni to'playdi.

O'tgan hafta mening MacBook Pro kompyuterim atigi 10 GB bo'sh joy bilan ishlayotgan edi. Turli xil tozalash usullarini sinab ko'rgandan so'ng, men do'stim Jemish Vasoya tomonidan yaratilgan ajoyib ochiq kodli vositani topdim, u atigi bitta buyruq bilan 80 GB joyni bo'shatdi!

Batafsil: https://parthvatalia.medium.com/devcleaner-the-one-click-solution-that-freed-up-80gb-on-my-mac-3598bb540863

@flutterdevuz
🔥21