- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试滚动整个页面。这是我的代码:
SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
color: Colors.white.withOpacity(0.95),
width: 400,
height: 400,
child: Text("")),
Flexible(
child: ListView(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
children: posts3,
),
),
],
),
);
A RenderFlex overflowed by 1162 pixels on the bottom.
最佳答案
从您的评论中,您想使整个 View 可滚动并在其中包含一个ListView,这是一个示例小部件,仅使用Flexible来完成此操作(您可能想知道的是我离开了ScrollConfiguration包装器,但是可以为您的父级删除该父级需求):
import 'package:flutter/material.dart';
import 'package:hybrid/@core/constants/nav_bar_index.dart';
import 'package:hybrid/@core/util/ui_util.dart';
import 'package:hybrid/screens/courses/course_details.dart';
import 'package:hybrid/screens/courses/shared/state_card.dart';
import 'package:hybrid/screens/courses/shared/state_model.dart';
import 'package:hybrid/screens/courses/shared/state_util.dart';
import 'package:hybrid/screens/shared/app_bar.dart';
import 'package:hybrid/screens/shared/nav_bar.dart';
import 'package:hybrid/screens/shared/scroll_behavior.dart';
const _grandCourseId = 'ILXBlsKJW8Cdqk27MTq5';
class Courses extends StatefulWidget {
@override
State<StatefulWidget> createState() => _CoursesState();
}
class _CoursesState extends State<Courses> {
List<StateModel> _states;
var _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
_states = StateUtil.buildStatesList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: BmsAppBar(),
body: Center(
child: Stack(
children: <Widget>[
Container(
decoration: UIUtil.getDecorationBg(),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_buildStatesListView(),
],
),
],
)),
bottomNavigationBar: NavBar(index: NavBarIndex.Courses),
);
}
Widget _buildStatesListView() {
return ScrollConfiguration(
behavior: ScrollBehaviorHideSplash(),
child: Flexible(
child: ListView.builder(
itemCount: _states.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {
if (_states[index].name.toLowerCase() == 'california') {
_navigateCourseDetails(context);
return;
}
_showInSnackBar(
'Courses in ${_states[index].name} Coming Soon!');
},
child: StateCard(
state: _states[index],
),
);
},
),
),
);
}
void _navigateCourseDetails(BuildContext context) async {
bool _ = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CourseDetails(id: _grandCourseId)),
);
}
void _showInSnackBar(String value) {
_scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Text(
value,
style: UIUtil.getTxtStyleCaption2(),
),
duration: new Duration(seconds: 3),
));
}
}
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hybrid/@core/bms_colors.dart';
import 'package:hybrid/@core/constants/nav_bar_index.dart';
import 'package:hybrid/@core/models/contest_model.dart';
import 'package:hybrid/@core/models/course_model.dart';
import 'package:hybrid/@core/services/admin_service.dart';
import 'package:hybrid/@core/ui-components/button_primary.dart';
import 'package:hybrid/@core/ui-components/progress_indicator.dart';
import 'package:hybrid/@core/ui-components/text_form_field.dart';
import 'package:hybrid/@core/util/auth_util.dart';
import 'package:hybrid/@core/util/ui_util.dart';
import 'package:hybrid/screens/account/confirm_contest.dart';
import 'package:hybrid/screens/shared/app_bar.dart';
import 'package:hybrid/screens/shared/nav_bar.dart';
import 'package:hybrid/screens/shared/scroll_behavior.dart';
class ContactUs extends StatefulWidget {
@override
State<StatefulWidget> createState() => _ContactUsState();
}
class _ContactUsState extends State<ContactUs> {
final _scaffoldKey = GlobalKey<ScaffoldState>();
final _formKey = GlobalKey<FormState>();
FirebaseUser _currentUser;
bool _autoValidate = false;
var _messageSent = false;
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: AuthUtil.getCurrentUser(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return _buildScaffold();
}
_currentUser = snapshot.data;
return _buildScaffold();
});
}
Widget _buildScaffold() {
return Scaffold(
key: _scaffoldKey,
appBar: BmsAppBar(),
body: _buildBody(),
bottomNavigationBar: NavBar(index: NavBarIndex.Home),
);
}
Widget _buildBody() {
if (_currentUser == null) {
return Stack(
children: <Widget>[
Container(
decoration: UIUtil.getDecorationBg(),
),
Center(
child: BmsProgressIndicator(),
),
],
);
}
return Stack(
children: <Widget>[
Container(
decoration: UIUtil.getDecorationBg(),
),
ScrollConfiguration(
behavior: ScrollBehaviorHideSplash(),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
_buildMemberNumCard(_currentUser.email),
Padding(
padding: EdgeInsets.only(
left: 20,
right: 20,
),
child: _buildContactForm(),
),
SizedBox(
height: 15,
),
(_messageSent)
? Container()
: Padding(
padding: EdgeInsets.only(top: 8, bottom: 8),
child: ButtonPrimary(
text: 'Send Message',
onPressed: () => _validateForm()),
),
],
),
),
),
],
);
}
Widget _buildMemberNumCard(String email) {
return Card(
color: BmsColors.primaryBackground,
elevation: 2.0,
child: ListTile(
title: Text(
'Contact Us',
style: UIUtil.getTxtStyleTitle3(),
),
subtitle: Text(
'We will respond via your email address: $email',
style: UIUtil.getListTileSubtitileStyle(),
),
leading: Icon(
Icons.contact_mail,
color: BmsColors.primaryForeground,
),
),
);
}
Widget _buildContactForm() {
return Form(
key: _formKey,
autovalidate: _autoValidate,
child: BmsTextFormField(
hintText: 'Enter Message',
maxLines: 3,
keyboardType: TextInputType.multiline,
textInputAction: TextInputAction.done,
validator: validateMessage,
inputFormatters: [LengthLimitingTextInputFormatter(100)],
onFieldSubmitted: (String val) {
if (val == null || val.isEmpty) {
return;
}
sendMessage(_currentUser.email, val);
},
onSaved: (String val) {
print('onSaved = $val');
sendMessage(_currentUser.email, val);
},
//validator: _validateOtherAmount,
),
);
}
void _showInSnackBar(String value, int seconds) {
_scaffoldKey.currentState.showSnackBar(new SnackBar(
content: Text(
value,
style: UIUtil.getTxtStyleCaption2(),
),
duration: Duration(seconds: seconds),
));
}
void _hideSnackBar() {
_scaffoldKey.currentState.hideCurrentSnackBar();
}
String validateMessage(String value) {
if (value == null || value.isEmpty)
return 'Please Enter Your Message';
else
return null;
}
void _validateForm() {
if (_formKey.currentState.validate()) {
// If all data are correct then save data to out variables
_formKey.currentState.save();
} else {
// If all data are not valid then start auto validation.
setState(() {
_autoValidate = true;
});
}
}
void sendMessage(email, message) async {
var result = await AdminService.contactUs(email: email, message: message);
if (result == ContactUsStatus.Error) {
_showInSnackBar(
'There was an error, please wait 30 seconds and try again', 10);
return;
}
_showInSnackBar('Message Sent, We will contact you shortly', 10);
setState(() {
_messageSent = true;
});
}
}
关于flutter - Flutter:SingleChildScrollView无法滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59001392/
我有一个父 SCS View (SingleChildScrollView)和一个子 SCS View 。在子 SCS View 中有一个数据表,数据表从屏幕底部的四分之一处开始。 现在,当用户滚动到
你们如何解决以下 Flutter 布局? 我有一个屏幕,我必须在其中显示,如图所示:一个 Logo + 3 个 TextFormFields + 2 个按钮 + 一个容器。 问题: 我需要将所有小部件
如何滚动 SingleChildScrollView以编程方式? 在长表单上,需要自动滚动到需要的输入字段。 最佳答案 有多种解决方案: 使用 ScrollController : 分配给 contr
我正在尝试归档类似于图像的布局,其中有一个顶部固定区域(红色)和一个可滚动区域(黄色),顶部有一些文本字段(文本 1、文本 2)和一个终端元素在可滚动区域的底部 (* Bottom Text)。我试着
我有一个 SingleChildScrollView,里面有一个 Container。我想要实现的是 Container 的 高度应该是一个完整的视口(viewport)高度。 我的代码: class
我在 flutter 方面遇到问题。我的屏幕没有滚动。我有几个组件使用 Column 功能将它们放在一个下方,但简单的滚动功能不起作用。 这是我的代码 Widget buildContent() {
我试图在用 singlechildscrollview 包裹的列中使用间隔器,它给了我一个错误。 RenderFlex children have non-zero flex but incoming
我尝试使用 ReorderableListView内SingleChildScrollView ,但我收到一个错误: I/flutter ( 9049): ══╡ EXCEPTION CAUGHT B
我不知道如何在 Flutter 中进行这种布局。我想要实现的是: 我有一列,包含一个固定高度的子项(标题文本小部件)和两个扩展小部件。我正在使用扩展,因为我希望每个人共享剩余屏幕的一半。 当方向更改为
是否可以检查 SingleChildScrollView 是否适合屏幕以便不需要滚动? 我想根据这些信息实现不同的行为。 提前感谢大家。 最佳答案 我遇到了同样的问题,并找到了解决方法。以下是我的制作
在我的 flutter 应用程序中,我需要一个布局,如果所有小部件对于屏幕而言都太长,我可以在其中滚动,因此我添加了一个 SingleChildScrollView。但是,如果小部件较小并且留有很多空
在我的 flutter 应用程序中,我需要一个布局,如果所有小部件对于屏幕而言都太长,我可以在其中滚动,因此我添加了一个 SingleChildScrollView。但是,如果小部件较小并且留有很多空
我有一个由列组成的布局,其中一个元素是一行(以便它占据屏幕的整个宽度)。在该行中,我有一个换行符,其内容相当大,我想将其放入 SingleChildScrollView 中。 @override
我正在尝试创建一个其中包含一列的 SingleChildScrollView,我希望在屏幕的最底部有一个按钮。为此,我尝试使用带有 SingleChildScrollView 和 FlatButton
这是我正在开发的登录页面的屏幕: https://ibb.co/X22g4rc 当键盘出现时,它告诉我有溢出,这似乎是正常的: https://ibb.co/mzVLJ4f 在网络上进行一些研究后,我
@override Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xff003859)
我的多行 TextField 需要一个滚动位置指示器,它被包裹在 SingleChildScrollView 中。 文本字段中的文本比可见的多,我看不出隐藏了一些文本及其隐藏位置(顶部或底部) 这是
我正在开发一个应用程序,并正在关注此 link 中的示例并遇到了一个问题,它说底部溢出 xx 像素,如下所示: 现在,我以前遇到过这个问题,通过添加 SingleChildScrollView 解决了
我正在使用 SingleChildScrollView,当点击其中的 FormTextField 时,键盘出现并且 ScrollView 向上滚动。关闭键盘后,我仍然可以手动滚动 Scrollview
每次我打开键盘时,图像都会根据键盘上方的屏幕尺寸进行缩放,而不是在设备的整个屏幕上。我的代码如下,请问如何解决?因为如果我不放置 SingleChieldScrollView,它将显示黄色像素警报横幅
我是一名优秀的程序员,十分优秀!