#flutter #dart
#flutter #dart
Вопрос:
У меня есть несколько файлов локализации, в которых более 200 строк используются внутри приложения flutter.Это число растет экспоненциально. Поэтому, чтобы решить проблему потребления памяти, я создаю локализации динамически, поэтому в любое время создается только одна локализация.
Теперь. Я объявляю строки как
class ExampleLocalizations{
final String myFirstString = "myString";
final String mySecondString = "myString";
final String myThirdString = "myString";
//200 more
}
Но я обеспокоен тем, что со временем будет проблемой иметь все эти строки одновременно. Поэтому я задаюсь вопросом, изменив его на
class ExampleLocalizations{
String get myFirstString => "myString";
String get mySecondString => "myString";
String get myThirsString => "myString";
}
Будет ли это рекомендуемым решением? Я думаю, что dart построит строки, и когда я удалю экран из навигации, мне интересно, соберет ли сборка мусора эту неиспользуемую строку.
Это может быть применено к любому типу, вопрос в том, является ли он более производительным.
Комментарии:
1. в кратком ответе он будет более производительным, я рекомендую использовать pub.dev/packages/intl_utils ситуация здесь такова, что вам нужно создать файлы как конечную строку myFirstString = «myString»; и он будет сгенерирован как строка get myFirstString { return Intl.message( ‘myString’,name: ‘myFirstString ‘, desc: «, args: [], ); } таким образом, это гарантирует, что он будет сгенерирован только при вызове строки как функции, а не при получении всех строк в качестве значения класса или чего-либо еще
2. Это
const
не вариант?3. О, спасибо. К сожалению, у меня есть пользовательская реализация локализации с поддержкой тематизации и стиля, чтобы избежать генерации кода и добавления дополнительных зависимостей. Итак, обратная связь действительно приятная, поскольку я ожидал такого поведения. И нет, const не является зельем, поскольку оно предназначено только для статических переменных и загружает все сразу. Это большое нет, нет
4. @ValdaXD во-первых, вы можете применить любую тему, которую вы определяете, к любому элементу flutter, не влияя на реальный дизайн строковой переменной, так что вы будете делать, когда у вас есть несколько языков? я гарантирую вам, что если вы использовали этот пакет, он получит строки как глобальные функции приложения и загрузит только необходимые строки, генерация кода здесь лучше, чем создание строк, и поддерживает больше функциональности, если вы хотите передавать аргументы строкам, если вам нужен полный пример, я могу опубликовать вам полныйпример в качестве ответа
5. Я бы не ожидал никакой разницы.
final
члены неявно объявляютget
ters. В общем, если один способ строго лучше другого, и если преобразование между ними тривиально, вы обычно должны быть в состоянии предположить, что компилятор выполнит оптимизацию за вас.