Flutter에서 SafeArea가 아닌 높이를 얻었고 많이 사용했어요.

12173 단어 FlutterDarttech
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이 정답입니다.
융통성 있게 활용하고 싶을 때 참고해주시면 좋을 것 같아요.👍

좋은 웹페이지 즐겨찾기