TGViewer
Flutter. Много Flutter. Много @flutter_amiga · 2.96K subscribers
Post #242 2.74K
Записки мобильного разработчика

Hola, Amigos! На связи Вова Зевеке, Flutter dev Amiga. Сегодня я поведаю о своём опыте интеграции штрих-кодов во Flutter-приложение.

Задача: сделать страницу с вертикальным штрих-кодом на весь экран. Слева от него надписи «номер карты» и сам номер карты.

Дополнительным усложнением был контроль яркости устройства. Если он меньше 80% на этой странице, то нужно повысить его искусственно.

Сначала создаю штрих-код с помощью пакета barcode_widget.

BarcodeWidget(
barcode: Barcode.ean13(drawEndChar: true),
data: data,
drawText: false,
errorBuilder: (context, error) => Center(
child: Text(error),
),
)


Теперь разворачиваю этот виджет на 90 градусов, чтоб он принял вертикальное положение на весь экран. К сожалению, настройки ширины ограничены и пришлось всё делать через RotatedBox.

RotatedBox(
quarterTurns: 1,
child: Column(
children: [
Expanded(
flex: 8,
child: Padding(
padding: const EdgeInsets.only(top: 8, left: 8, right: 8),
child: BarcodeWidget(
<...>
),
),
),
],
),
)


Штрих-код готов, осталось добавить записи и тоже вертикально.

RotatedBox(
quarterTurns: 1,
child: Column(
children: [
Expanded(
flex: 8,
child: Padding(
padding: const EdgeInsets.only(top: 8, left: 8, right: 8),
child: BarcodeWidget(
<...>
),
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.all(8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
S.current.barCodePageCardNumber,
style: textStyle,
),
Text(
widget.cardCode,
style: textStyle,
),
],
),
),
)
],
),
)


Перепробовал множество способов вёрстки, и это оптимальное решение, которое мне удалось найти. Если у вас был более удачный опыт, пишите в чате!

Осталось сделать регулирование яркости устройства. Я использовал пакет screen_brightness. Для работы с ним необходимо разрешение для Android: <uses-permission android:name="android.permission.WAKE_LOCK" />. Пакет позволяет менять яркость устройства через класс ScreenBrightness.

@override
void initState() {
initBrightness();
super.initState();
}

Future<void> initBrightness() async {
final isRealDevice = await SafeDevice.isRealDevice;
if (isRealDevice) {
brightness = await ScreenBrightness().current;
if (brightness < 0.8) {
await ScreenBrightness().setScreenBrightness(0.8);
}
}
}


Однако, яркость нужно вернуть обратно, если пользователь покинет страницу. Для этого нам и пригодится сохранённое значение яркости.

Material(
child: PopScope(
onPopInvoked: (value) async {
await ScreenBrightness().setScreenBrightness(brightness);
},
child: Scaffold(
appBar: AppBar(
backgroundColor: const Color(0xFF1A1A18),
leading: InkWell(
onTap: () async {
await await ScreenBrightness().setScreenBrightness(brightness);
if (mounted) {
Navigator.of(context).pop();
}
},
<…>


Был ли у вас подобные задачи? ➡️ Чат.
  • 🔥 10
  • 👍 8
  • ❤ 2
  • 💘 1
More from @flutter_amiga
  1. Sep 9, 2026AI BOOST’26: выручка падает — что делают крупные digital-агентства и при чем здесь AI 22–2…
  2. Aug 18, 2026Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня посмотрим на чек-…
  3. Aug 13, 2026Hola, Amigos! Сегодня вышли Flutter 3.47 и Dart 3.13. Давайте вместе разберемся, что в них…
  4. Jul 31, 2026Дайджест июля Hola, Amigos! Собрали в одну подборку все полезные посты июля, которые вы мо…
  5. Jul 28, 2026Hola, Amigos! Сегодня посмотрим на один пакет, который может быть полезен в разработке - p…
  6. Jul 24, 2026Hola, Amigos! Сегодня мы вводим новую рубрику - обзоры правил для статического анализатора…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →