flutter - BoxConstraints 在使用 DraggableScrollableSheet 时强制使用无限高
问题描述
尝试添加DraggableScrollableSheet
和时发现以下错误Sliver
:
The following assertion was thrown during performLayout():
BoxConstraints forces an infinite height.
The offending constraints were: BoxConstraints(w=1440.0, h=Infinity)
The relevant error-causing widget was:
DraggableScrollableSheet file:///Users/mac/Desktop/Click%20Project/l7/lib/screens/main/view/main_screen.dart:39:19
When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 236:49 throw_
packages/flutter/src/rendering/box.dart 517:9 throwError
packages/flutter/src/rendering/box.dart 561:80 <fn>
packages/flutter/src/rendering/box.dart 564:14 debugAssertIsValid
packages/flutter/src/rendering/object.dart 1679:23 layout
...
The following RenderObject was being processed when the exception was fired: RenderConstrainedBox#3fd13 relayoutBoundary=up5 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
... parentData: offset=Offset(0.0, 0.0) (can use size)
... constraints: BoxConstraints(0.0<=w<=1440.0, 0.0<=h<=Infinity)
... size: MISSING
... additionalConstraints: BoxConstraints(biggest)
RenderObject: RenderConstrainedBox#3fd13 relayoutBoundary=up5 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
parentData: offset=Offset(0.0, 0.0) (can use size)
constraints: BoxConstraints(0.0<=w<=1440.0, 0.0<=h<=Infinity)
size: MISSING
additionalConstraints: BoxConstraints(biggest)
... child: RenderFractionallySizedOverflowBox#a7974 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
... parentData: <none>
... constraints: MISSING
... size: MISSING
... alignment: Alignment.bottomCenter
... textDirection: ltr
... widthFactor: pass-through
... heightFactor: 0.5
... child: _RenderScrollSemantics#c849d NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
... parentData: offset=Offset(0.0, 0.0)
... constraints: MISSING
... semantic boundary
... size: MISSING
... child: RenderPointerListener#fea50 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
... parentData: <none>
... constraints: MISSING
... size: MISSING
... behavior: deferToChild
... listeners: signal
... child: RenderSemanticsGestureHandler#04607 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
... parentData: <none>
... constraints: MISSING
... size: MISSING
... behavior: opaque
... gestures: <none>
====================================================================================================
======== Exception caught by rendering library =====================================================
The following assertion was thrown during performLayout():
Assertion failed: file:///Users/mac/Developer/flutter/packages/flutter/lib/src/rendering/box.dart:1930:12
hasSize
"RenderBox was not laid out: RenderConstrainedBox#3fd13 relayoutBoundary=up5 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE"
这是包含错误的以下代码:
import 'package:flutter/material.dart';
import 'package:l7/screens/home/view/home_screen.dart';
import 'package:l7/screens/main/view_model/main_view_model.dart';
import '../../BaseScreen.dart';
import 'components/header.dart';
import 'components/intro_main_screen_widget.dart';
import 'components/side_menu.dart';
class MainScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BaseScreen<MainViewModel>(
onModelReady: (mainViewModel) {},
onFinish: (mainViewModel) {},
builder: (context, viewModel, _) {
return Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/blog_bg.png"),
fit: BoxFit.fill,
),
),
child: Scaffold(
backgroundColor: Colors.transparent,
key: viewModel.scaffoldKey,
drawer: Theme(
data: Theme.of(context)
.copyWith(canvasColor: Colors.white.withOpacity(0.6)),
child: SideMenu(),
),
body: Container(
color: Colors.black.withOpacity(0.35),
height: MediaQuery.of(context).size.height,
child: Column(
children: [
Header(),
DraggableScrollableSheet(
builder: (BuildContext context,
ScrollController scrollController) =>
NestedScrollView(
controller: scrollController,
headerSliverBuilder:
(BuildContext context, bool innerBoxIsScrolled) => [
SliverToBoxAdapter(
child: IntroMainScreenWidget(),
),
],
body: CustomScrollView(
slivers: [
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => Column(
children: [
HomeScreen(),
],
),
),
),
],
),
),
),
],
),
),
),
);
},
);
}
}
这是以下内容IntroMainScreenWidget
:
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:l7/services/responsive.dart';
import 'package:l7/utils/constants.dart';
import 'package:l7/utils/texts.dart';
class IntroMainScreenWidget extends StatelessWidget {
const IntroMainScreenWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
SizedBox(height: kDefaultPadding * 2),
Container(
padding: EdgeInsets.symmetric(vertical: 15),
color: Colors.black.withOpacity(0.35),
width: MediaQuery.of(context).size.width,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
largeText(
tr('welcome_to_our_blog'),
context,
mobileFontSize: 30,
webTextColor: Colors.white,
mobileTextColor: Colors.white
),
Padding(
padding:
const EdgeInsets.symmetric(vertical: kDefaultPadding),
child: smallText(
tr('blog_intro'),
context,
textColor: Colors.white,
),
),
FittedBox(
child: TextButton(
onPressed: () {},
child: Row(
children: [
mediumText(
tr('learn_more'),
context,
),
SizedBox(width: kDefaultPadding / 2),
Icon(
Icons.arrow_forward,
color: Colors.white,
),
],
),
),
),
],
),
),
if (Responsive.isDesktop(context))
SizedBox(height: kDefaultPadding),
],
);
}
}
这是以下内容HomeScreen()
:
import 'package:flutter/material.dart';
import 'package:l7/screens/BaseScreen.dart';
import 'package:l7/screens/home/viewmodel/home_view_model.dart';
import 'components/info_widget.dart';
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BaseScreen<HomeViewModel>(
onModelReady: (homeViewModel) {},
onFinish: (_) {
print(' home screen finished');
},
builder: (context, homeViewModel, child) {
print(' home screen started');
return InfosPart();
},
);
}
}
作为 github 中的以下相关存储库https://github.com/MHarooney/L7
我希望有人可以帮助我:D..
解决方案
通过修复高度问题DraggableScrollableSheet
,gitHubExpanded
推荐阅读
- c++ - _CrtSetDbgFlag 未按预期工作:返回 NULL
- c++ - 在函数中使用传递的参数列表
- java - 如何在 JAVA servlet 方法中注入字符串?
- php - 获取未分配给 WooCommerce 变体的购物车项目产品属性
- apache-camel - 使用 camel-smb SMB 拾取(大)文件,同时仍被写入
- php - PHP / Laravel 不接受 .upd 文件作为文件
- python - Flakehell 忽略 darglit 的附加 setup.cfg 参数
- matlab - 如何找到平稳概率分布并确定状态概率将在哪一步保持不变
- python - Python多线程/多处理断言所有进程在继续之前已同步和暂停
- python - TypeError:传递给参数“输入”的值的 DataType bool 不在允许值列表中:float32、float64、int32、uint8、int16、int8