У меня проблемы с поиском лучшего способа установки некоторых констант (в основном, строк). В настоящее время я использую файл constants.dart, в котором определены переменные const, и импортирую его всякий раз, когда это необходимо. Нет класса или что-нибудь, просто пустой файл дротика. Это работает, однако я недавно реализовал локализацию с помощью плагина Flutter Intl в Android Studio. Я получил все для работы и могу сделать что-то вроде этого S.of(context).settings
, и он получает перевод из правильного файла. Моя проблема связана с постоянным списком строк, которые есть в моем файле constants.dart. Я использую их во многих местах для выбора вариантов. Они выглядят так:
const playType = [
'RP/Story Focused',
'Battle/Combat Focused',
'Puzzles and Challenges',
'Exploration/Travel',
];
const length = [
'One Shot',
'2-5 Sessions',
'5-10 Sessions',
'On-going Campaign',
];
Я не могу изменить строки на ссылку Intl, потому что нет контекста для передачи. Не уверен, как настроить загруженный класс, но не уверен, как настроить его и использовать пакет Provider для его обслуживания.
РЕДАКТИРОВАТЬ: вот файл констант. Звонить с провайдером это нормально. Проблема возникает, когда мне нужно использовать локализацию для строк в списках
import 'package:scryer/generated/l10n.dart';
class Constants {
Constants._();
static final instance = Constants._();
static List<String> playType = [
S.of(context).rpstoryFocused,//need a reference to a context
'Battle/Combat Focused',
'Puzzles and Challenges',
'Exploration/Travel',
];
static const length = [
'One Shot',
'2-5 Sessions',
'5-10 Sessions',
'On-going Campaign',
];
}
Вот как я называю константы на реальной странице. Это кнопка, которая при нажатии переходит к новому экрану, который является либо списком флажков с несколькими выборками, либо списком переключателей с одним выбором. Я передаю константы в качестве аргумента для списка
MaterialPageRoute(builder: (context) {
return MultiSelectScreen(
args: MultiSelectArguments(
label: S.of(context).selectPreferredPlayStyle,
options: playType, //this is the constants list reference
selections:
profile.playType,
),
);
})
Простое решение состоит в том, чтобы не использовать константу, а просто создать списки в этих точках, которые, как мне кажется, используются только дважды, но лучше потянуть это из-за его использования несколько раз