Механизм Part Of
Все наши файлы на Dart это небольшие библиотеки, но иногда они становятся настолько большими, что их хочется поделить. В этом случае можно применить ключевые слова
part и part of.Этот механизм часто используется библиотеками для генерации кода. Думаю, вы видели файлы
my_class.g.dart, если такими пользуетесь.Давайте рассмотрим как работать с данным механизмом на примере BLoC. У нас есть файл
my_bloc.dart, который будет основным, и файлы my_event.dart и my_state.dart, которые будут его частями.В
my_bloc.dart мы пропишем:part ‘my_event.dart’;
part ‘my_state.dart;
И уже в файлах-частях вместо импортов будет строчка:
part of ‘my_bloc.dart’;
Таким образом эти 3 файла будут распознаваться как один и тем самым импорты мы можем писать только в
my_bloc.dart, и он же будет импортироваться в другие файлы.Part of имеет смысл применять, только если это неотделимые друг от друга классы. Например, события и состояния для BLoC или обработка JSON для моделей, в остальных случаях лучше использовать export.Выбор импорта в зависимости от условий
Допустим, вы делаете приложение и на мобильные платформы, и на веб, но некоторые импорты нужно менять в зависимости от платформы. Это бывает при использовании
dart:io и dart:web Тут к нам на выход приходит использование if.Для этого нужно будет подготовить 3 файла — один под МП, второй под веб, третий если ни один из них не подходит. И создать третий файл для экспорта:
export ‘my_none.dart’
if (dart.library.io) ‘my_mobile.dart’
if (dart.library.js_interop) ‘my_web.dart’;
Импортируя уже этот файл, мы точно получим нужный нам инстанс, который будет работать.
Делитесь в чате, пробовали ли вы использовать эти 2 механики на своих проектах? И пишите, что еще хотели бы узнать, а мы соберем информацию об этом❤️
