Flutter에서 SafeArea가 아닌 높이를 얻었고 많이 사용했어요.
class SafeAreaUtil {
factory SafeAreaUtil() => _cache;
SafeAreaUtil._internal();
static final SafeAreaUtil _cache = SafeAreaUtil._internal();
static double unSafeAreaBottomHeight;
bool get hasUnSafeAreaBottomHeight => unSafeAreaBottomHeight != 0.0;
}
단식의 물건을 만들다.class App extends StatelessWidget {
const App();
Widget build(BuildContext context) => MaterialApp(
title: 'title',
home: Home(),
builder: _builder,
...(themeとか色々),
);
Widget _builder(BuildContext context, Widget child) {
SafeAreaUtil.unSafeAreaBottomHeight = MediaQuery.of(context).padding.bottom;
return child;
}
}
응용 프로그램이 시작될 때 계산하고 삽입합니다.(shared preference를 넣어도 괜찮을 것 같지만 OS 업데이트나 Safe Area의 구조 변화로 인해 무서울 수 있다.)
class SimpleFooter extends StatelessWidget {
const SimpleFooter({ this.child});
final Widget child;
Widget build(BuildContext context) => Container(
color: Theme.of(context).footerColor,
height: _height(context),
child: _column(context),
);
double _height(BuildContext context) => simpleFooterHeight(
hasSafeAreaHeight: _hasSafeArea,
);
double simpleFooterHeight({ bool hasSafeAreaHeight}) =>
hasSafeAreaHeight ? 83 : 72;
bool get _hasSafeArea =>
SafeAreaUtil().hasUnSafeAreaBottomHeight;
Column _column(BuildContext context) => Column(
children: <Widget>[
_divider(context),
_padding,
if (_hasSafeArea) const SizedBox(height: 11),
],
);
Divider _divider(BuildContext context) => Divider(
height: 0.5,
color: Theme.of(context).borderColor,
);
Padding get _padding => Padding(
padding:
const EdgeInsets.only(left: 12, top: 11.5, right: 12, bottom: 12),
child: child,
);
}
이런 느낌으로 호출한다.기본적으로 SafeArea Widget이 정답입니다.
융통성 있게 활용하고 싶을 때 참고해주시면 좋을 것 같아요.👍
Reference
이 문제에 관하여(Flutter에서 SafeArea가 아닌 높이를 얻었고 많이 사용했어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yusuke_0505/articles/7fcb43612db8b3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)