пример использования флаттера
Есть ли какой-нибудь пример примера функции useContext()? Я хочу использовать
AppLocalizations.of(context).someText
во многих виджетах-перехватчиках, и я не уверен, достаточно ли этого просто обернуть в функцию useEffect при инициализации.
2 ответа
Мы можем использовать вот так.
Widget _getAccountRegister() {
final context = useContext();
return Container(
margin: const EdgeInsets.all(10),
child: FlatButton(
padding: const EdgeInsets.all(10),
onPressed: () {
NavigationUtils.push(context, routeRegister);
},
child: Text(Localization.of(context).signIn),
),
);
}
я использовалuseContext()
в моей вспомогательной функции cubit. Он глобальный, но используется внутриbuild()
методы вHookWidgets
:
void useCubitListener<BLOC extends Cubit<S>, S>(
BLOC bloc,
BlocListener<BLOC, S> listener, {
bool Function(S current)? listenWhen,
}) {
final context = useContext();
final listenWhenConditioner = listenWhen;
useMemoized(
() {
final stream =
bloc.stream.where(listenWhenConditioner ?? (state) => true).listen((state) => listener(bloc, state, context));
return stream.cancel;
},
[bloc],
);
}
а потом:
useCubitListener<BookDetailsCubit, BookDetailsPageState>(cubit, (cubit, state, context) {
state.maybeWhen(
saveBook: () => context.router.pop<bool>(true),
deleteBook: () => context.router.pop<bool>(true),
orElse: () => null,
);
}, listenWhen: (state) => (state is BookDetailsPageSaveBook));
Подробнее о локтях и крючках здесь .