Хотя с static const
нет технических проблем, архитектурно вы можете захотеть сделать это по-другому.
Флаттер имеет тенденцию , а не иметь какие-либо глобальные / статические переменные и использовать InheritedWidget.
Что означает, что вы можете написать:
class MyConstants extends InheritedWidget {
static MyConstants of(BuildContext context) => context.inheritFromWidgetOfExactType(MyConstants);
const MyConstants({Widget child, Key key}): super(key: key, child: child);
final String successMessage = 'Some message';
@override
bool updateShouldNotify() => false;
}
Затем вставляется в корень вашего приложения:
void main() {
runApp(
MyConstants(
child: MyApp(),
),
);
}
И используется как таковой:
@override
Widget build(BuilContext context) {
return Text(MyConstants.of(context).successMessage);
}
В нем немного больше кода, чем в static const
, но есть много преимуществ:
- Работает с горячей перезагрузкой
- Легко тестируемый и поддающийся проверке
- Может быть заменено чем-то более динамичным, чем константы, без переписывания всего приложения.
Но в то же время это:
- Не потребляет намного больше памяти (унаследованный виджет обычно создается один раз)
- Работоспособен (получение наследуемого виджета равно O (1))