【Flutter】 showModalBottomSheet에서 SafeArea가 효과가 없을 때의 대처법
5511 단어 Flutter
개요
Flutter로 모바일 앱의 UI 구현을 할 때, isScrollControlled를 true로 한 ModalBottomSheet가 화면 상단의 음영 부분에 걸려 버리는 문제의 해소법을 소개하겠습니다.
사용할 Widget
부모 Widget (문의 양식) - main.dart
자식 Widget (메시지 제출 양식) - child.dart
화면 상부의 음영 부분에 View가 덮여 버리고 있군요··.
AppBar가 없는 View에서는 SafeArea를 사용하여 화면 상단에 덮이지 않도록 구현할 수 있어야합니다.
childView.dart
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea( //SafeAreaを使えば画面上部に被るのを防止できるはず・・
child: Container(...),
)
);
}
불행히도 변하지 않습니다 ··.
해결책
main.dart
// --省略
child: ElevatedButton(
child: Text("お問い合わせをする"),
onPressed: () {
BuildContext mainContext = context; //これを追加
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (BuildContext context) {
return parentWidget(
mainContext //子Widgetに渡す
);
});
},
),
childView.dartWidget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Container(
margin: EdgeInsets.all(20),
padding: EdgeInsets.only( //
top: MediaQuery.of(widget.context).padding.top, //親Widgetから渡されたBuildContextをpaddingで指定
),
child: Column(//..省略),
),
),
);
}
안전한 느낌으로 나타났습니다.
문제점
부모 Widget이 main.dart가 아닌 경우, 아이 Widget에 BuildContext를 건네주어 padding에 지정해도 0.0으로서 취급되어 올바르게 대처할 수 없다.
→ main.dart에서 MediaQuery를 사용하여 화면 상단의 padding을 얻고 자식 Widget까지 전달하고 padding으로 지정하면 좋습니까?
main.dartdouble height = MediaQuery.of(context).padding.top;
단말기별 화면 상단의 높이는 이 방법으로 얻을 수 있습니다.
좋은 느낌의 해결책은 현재 조사 중입니다.
참고
Reference
이 문제에 관하여(【Flutter】 showModalBottomSheet에서 SafeArea가 효과가 없을 때의 대처법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/arie0703/items/dc022459948ba04e1745
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
부모 Widget (문의 양식) - main.dart
자식 Widget (메시지 제출 양식) - child.dart
화면 상부의 음영 부분에 View가 덮여 버리고 있군요··.
AppBar가 없는 View에서는 SafeArea를 사용하여 화면 상단에 덮이지 않도록 구현할 수 있어야합니다.
childView.dart
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea( //SafeAreaを使えば画面上部に被るのを防止できるはず・・
child: Container(...),
)
);
}
불행히도 변하지 않습니다 ··.
해결책
main.dart
// --省略
child: ElevatedButton(
child: Text("お問い合わせをする"),
onPressed: () {
BuildContext mainContext = context; //これを追加
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (BuildContext context) {
return parentWidget(
mainContext //子Widgetに渡す
);
});
},
),
childView.dartWidget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Container(
margin: EdgeInsets.all(20),
padding: EdgeInsets.only( //
top: MediaQuery.of(widget.context).padding.top, //親Widgetから渡されたBuildContextをpaddingで指定
),
child: Column(//..省略),
),
),
);
}
안전한 느낌으로 나타났습니다.
문제점
부모 Widget이 main.dart가 아닌 경우, 아이 Widget에 BuildContext를 건네주어 padding에 지정해도 0.0으로서 취급되어 올바르게 대처할 수 없다.
→ main.dart에서 MediaQuery를 사용하여 화면 상단의 padding을 얻고 자식 Widget까지 전달하고 padding으로 지정하면 좋습니까?
main.dartdouble height = MediaQuery.of(context).padding.top;
단말기별 화면 상단의 높이는 이 방법으로 얻을 수 있습니다.
좋은 느낌의 해결책은 현재 조사 중입니다.
참고
Reference
이 문제에 관하여(【Flutter】 showModalBottomSheet에서 SafeArea가 효과가 없을 때의 대처법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/arie0703/items/dc022459948ba04e1745
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// --省略
child: ElevatedButton(
child: Text("お問い合わせをする"),
onPressed: () {
BuildContext mainContext = context; //これを追加
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (BuildContext context) {
return parentWidget(
mainContext //子Widgetに渡す
);
});
},
),
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Container(
margin: EdgeInsets.all(20),
padding: EdgeInsets.only( //
top: MediaQuery.of(widget.context).padding.top, //親Widgetから渡されたBuildContextをpaddingで指定
),
child: Column(//..省略),
),
),
);
}
부모 Widget이 main.dart가 아닌 경우, 아이 Widget에 BuildContext를 건네주어 padding에 지정해도 0.0으로서 취급되어 올바르게 대처할 수 없다.
→ main.dart에서 MediaQuery를 사용하여 화면 상단의 padding을 얻고 자식 Widget까지 전달하고 padding으로 지정하면 좋습니까?
main.dart
double height = MediaQuery.of(context).padding.top;
단말기별 화면 상단의 높이는 이 방법으로 얻을 수 있습니다.
좋은 느낌의 해결책은 현재 조사 중입니다.
참고
Reference
이 문제에 관하여(【Flutter】 showModalBottomSheet에서 SafeArea가 효과가 없을 때의 대처법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/arie0703/items/dc022459948ba04e1745
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Flutter】 showModalBottomSheet에서 SafeArea가 효과가 없을 때의 대처법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/arie0703/items/dc022459948ba04e1745텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)