Skip to content

Instantly share code, notes, and snippets.

View kdmatrosov's full-sized avatar
:octocat:
Coding

Kirill Matrosov kdmatrosov

:octocat:
Coding
  • Moscow
View GitHub Profile
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override

Flutter. Упрощаем работу с глубокими деревьями виджетов с помощью Dart расширений

В версии Dart 2.7 нам представили расширения, позволяющие разработчикам добавлять новые функциональные возможности в уже существующие типы. Расширения могут быть отличным помощником не только, когда мы пишем бизнес-логику, но и когда у нас есть другие задачи! Примером такой задачи может служить работа с виджетами.

Исходя из своего опыта разработки под iOS, вдохновившись ViewModifier из SwiftUI, я захотел разобраться в том, как использовать Dart расширения аналогичным образом, чтобы уменьшить визуальный беспорядок, который получается при большой вложенности дерева виджетов.

Давайте рассмотрим пример!

Вариант с вложенными виджетам

Flutter. Разбираемся с CustomClipper

Flutter предлагает различные виджеты для работы с определенным набором фигур, например, ClipRect, ClipRRect, ClipOval. И также есть ClipPath, с помощью которого мы можем создавать любые типы фигур.

В данной статье мы сосредоточимся на том, что можно сделать, используя ClipPath и CustomClipper. Поехали!

ClipPath

@kdmatrosov
kdmatrosov / example_gen.dart
Created May 30, 2020 12:44
Пример от Фокса
void main() {
print('BEGIN');
try {
final Iterable<int> i = gen();
i.forEach(log);
} on dynamic catch (_) {
rethrow;
} finally {
print('THE END');
}
import 'dart:async';
void main() {
try {
runZoned(() {
throw Exception('inside');
}, onError: print);
throw Exception('test');
} catch(error) {
print(error);
}
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(

Как улучшить производительность вашего Flutter приложения

Есть много вопросов, связанных с тем, как мы можем улучшить производительность нашего Flutter приложения. Необходимо сразу уточнить, что Flutter производительный по умолчанию, но мы должны избегать некоторых ошибок при написании кода, чтобы приложение работало хорошо и быстро. Ниже я подготовил для вас ряд советов и подсказок, как можно писать, чтобы не приходилось постоянно обращаться к инструментам профилирования.

Не выносите виджеты в методы класса

Когда у нас есть сложное представление, чтобы реализовать в один виджет, то обычно мы разделяем его на виджеты поменьше, которые помещаем в методы класса.

В следующем примере представлен виджет, содержащий заголовок, основной контент и "подвал" (footer).

@kdmatrosov
kdmatrosov / dart_const_tutorial.md
Last active May 13, 2020 15:30
Перевод "Dart Const Tutorial – All You Need to Know (Const Expressions, Canonical Instances and More)" https://resocoder.com/2020/01/06/dart-const-tutorial-all-you-need-to-know-const-expressions-canonical-instances-and-more/

Dart. Всё, что надо знать про константы

Константы - это не просто противная версия final переменных, которая будет преследовать вас во сне со всеми связанными с ними ошибками. Compile-time константы – это хороший способ повысить производительность вашего приложения, не создавая один и тот же объект несколько раз.

const или final?

Давайте, разберемся с этим вопросом, прежде чем перейти к более глубокому изучению констант. Со стороны кажется, что не имеет значения, есть у вас ключевое слово const или final перед переменной. Эти переменные не могут быть изменены после их объявления.

void run() {
  const myConstNumber = 5;
 final myFinalNumber = 5;