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

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

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

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

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

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

import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
import 'dart:async';
void main() {
try {
runZoned(() {
throw Exception('inside');
}, onError: print);
throw Exception('test');
} catch(error) {
print(error);
}
@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');
}

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

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

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

ClipPath

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

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

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

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

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

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