Flutter Layout/Sizing/Render 问题
Flutter Layout/Sizing/Render Issue
我正在尝试动态呈现 DailyWeatherForecast 列表,这是一个 Flutter StatelessWidget。 DailyWeatherForecast 小部件有一些变量,例如 final String month
和 final double low
,它们旨在作为一天的单一汇总预报作为窄卡。它有一个构造函数,如果我从 main.dart 向它传递硬编码值,它就会工作。它看起来很棒。
不过,信息是从 API 中提取的。所以,我不能对这些信息进行硬编码。请参阅下面的代码了解我的方法:
import 'package:flutter/material.dart';
import 'package:todo/classes/daily_weather_forecast.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:intl/intl.dart';
// `flutter run --no-sound-null-safety`
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var lat = "35";
var lon = "139";
var exclude = "minutely,hourly";
var appid = "<HIDDEN>";
var url = "https://api.openweathermap.org/data/2.5/onecall";
Map? weatherData;
//List<Map>? dailyWeather;
Iterable<int>? dailyWeather;
var now = DateTime.now();
List months = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
];
void callApis() {
debugPrint('test???');
var endpoint = url +
"?lat=" +
lat +
"&lon=" +
lon +
"&exclude=" +
exclude +
"&appid=" +
appid;
debugPrint(endpoint);
http.get(endpoint, headers: {"Accept": "application/json"}).then((result) {
setState(() {
debugPrint(result.headers.toString());
weatherData = json.decode(result.body);
if (weatherData != null) {
//dailyWeather = weatherData!['daily'];
dailyWeather =
Iterable<int>.generate(weatherData!['daily'].length).toList();
}
});
});
}
@override
void initState() {
debugPrint('test???');
//fetchWeatherData();
callApis();
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
actions: const <Widget>[
Icon(
Icons.cloud_circle,
size: 36,
//color: Colors.black54,
color: Color.fromRGBO(7, 101, 162, 1),
),
//spacing to the right
SizedBox(width: 12)
],
title: Text(
weatherData != null
? weatherData!["timezone"]
.toString() //weatherData![0]['name'].toString()
: "Weather App",
style: const TextStyle(color: Color.fromRGBO(7, 101, 162, 1))),
),
/* NOTE: ListView is RecycleView equivalent in Flutter */
body: ListView(
scrollDirection: Axis.vertical,
children: <Widget>[
FractionallySizedBox(
widthFactor: 0.8,
child: Column(
children: dailyWeather?.map(
(index) {
int i = index.round();
Map dayData = weatherData?["daily"][i];
debugPrint("DAY DATA: " + dayData.toString());
if (dayData["temp"] == null) {
return const Text("nil");
}
if (dayData["weather"] == null ||
dayData["weather"] == []) {
return const Text("nil");
}
return Row(
children: [
// spacer
Container(
height: 24,
),
DailyWeatherForecast(
month: months[now.month - 1].toString(),
day: (now.day + i).round(),
high: dayData["temp"]["max"],
low: dayData["temp"]["min"],
probability: dayData["rain"],
excerpt: dayData["weather"][0]["main"],
description: dayData["weather"][0]
["description"]),
// spacer
Container(
height: 64,
)
],
);
},
).toList() ??
[
Image.network(
"https://upload.wikimedia.org/wikipedia/commons/b/b9/Youtube_loading_symbol_1_(wobbly).gif")
],
),
),
],
),
),
);
}
}
您可以在下面看到 daily_weather_forecast.dart 文件和错误(按此顺序):
import 'package:flutter/material.dart';
class DailyWeatherForecast extends StatelessWidget {
/* Numeric day of the month */
final String month;
final int day;
final double high;
final double low;
final double probability;
/* Shorter description; "Sunny and Warm" */
final String excerpt;
/* Longer description; "Cloudless and generally warm, with a high of 75F and a low of 57F. Some high clouds late in the day." */
final String description;
/* constructors */
const DailyWeatherForecast(
{Key? key,
required this.month,
required this.day,
required this.high,
required this.low,
required this.probability,
required this.excerpt,
required this.description})
: super(key: key);
@override
Widget build(BuildContext context) {
return TextButton(
onPressed: () {
final snackBar = SnackBar(content: Text(description));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
},
child: Container(
decoration: const BoxDecoration(
color: Color.fromRGBO(7, 101, 162, 1),
borderRadius: BorderRadius.all(Radius.circular(8))),
child: Row(
children: <Widget>[
const SizedBox(width: 20, height: 64),
Column(
children: [
Text(month,
style:
const TextStyle(color: Colors.white, fontSize: 12)),
Text(day.toString(),
style:
const TextStyle(color: Colors.white, fontSize: 18))
],
),
const SizedBox(width: 20),
Text(low.toString() + "F",
style: const TextStyle(color: Colors.white, fontSize: 20)),
const Spacer(),
Column(
children: [
Text(excerpt,
style: const TextStyle(
color: Colors.white, fontWeight: FontWeight.w600)),
Text(probability.toString() + "% precipation",
style: const TextStyle(color: Colors.white70)),
],
),
const Spacer(),
Text(high.toString() + "F",
style: const TextStyle(color: Colors.white, fontSize: 20)),
const SizedBox(width: 20),
],
)));
}
}
这是完整的终端输出(删除了 DAY DATA 日志,以保持字符数限制):
√ Built build\app\outputs\flutter-apk\app-debug.apk.
I/flutter (13021): test???
I/flutter (13021): test???
I/flutter (13021): ENDPOINT: https://api.openweathermap.org/data/2.5/onecall?lat=44.5630283&lon=-123.3185558&exclude=minutely,hourly&units=imperial&appid=1402ba071d730e537b18335ee1dcbdb2
Syncing files to device Android SDK built for x86...
149ms
Flutter run key commands.
r Hot reload.
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
Running with unsound null safety
For more information see
https://dart.dev/null-safety/unsound-null-safety
An Observatory debugger and profiler on Android SDK built for x86 isavailable at: http://127.0.0.1:57917/zOC4HZuw9FM=/
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY
╞═════════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
RenderFlex children have non-zero flex but incoming height
constraints are unbounded.
When a column is in a parent that does not provide a finite height
constraint, for example if it is
in a vertical scrollable, it will try to shrink-wrap its children
along the vertical axis. Setting a
flex on a child (e.g. using Expanded) indicates that the child is toexpand to fill the remaining
space in the vertical direction.
These two directives are mutually exclusive. If a parent is to
shrink-wrap its child, the child
cannot simultaneously expand to fit its parent.
Consider setting mainAxisSize to MainAxisSize.min and using
FlexFit.loose fits for the flexible
children (using Flexible rather than Expanded). This will allow the
flexible children to size
themselves to less than the infinite remaining space they would
otherwise be forced to take, and
then will cause the RenderFlex to shrink-wrap the children rather
than expanding to fit the maximum
constraints provided by the parent.
If this message did not help you determine the problem, consider
using debugDumpRenderTree():
https://flutter.dev/debugging/#rendering-layer
http://api.flutter.dev/flutter/rendering/debugDumpRenderTree.html
The affected RenderFlex is:
RenderFlex#7ff70 relayoutBoundary=up7 NEEDS-LAYOUT NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE(creator: Column ← Column ←
FractionallySizedBox ← RepaintBoundary ← IndexedSemantics ←
NotificationListener<KeepAliveNotification> ← KeepAlive ←
AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ←
SliverPadding ← ⋯, parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use size), constraints:
BoxConstraints(0.0<=w<=314.2, 0.0<=h<=Infinity), size: MISSING,
direction: vertical, mainAxisAlignment: start, mainAxisSize: max,
crossAxisAlignment: center, verticalDirection: down)
The creator information is set to:
Column ← Column ← FractionallySizedBox ← RepaintBoundary ←
IndexedSemantics ←
NotificationListener<KeepAliveNotification> ← KeepAlive ←
AutomaticKeepAlive ← KeyedSubtree ←
SliverList ← MediaQuery ← SliverPadding ← ⋯
See also: https://flutter.dev/layout/
If none of the above helps enough to fix this problem, please don't
hesitate to file a bug:
https://github.com/flutter/flutter/issues/new?template=2_bug.md
The relevant error-causing widget was:
Column
Column:file:///C:/Users/Lucas%20Pichette/Desktop/School/W22/CS492_ Mobile_Software_Dev/assignment2-api/todo/lib/main.dart:162:29
When the exception was thrown, this was the stack:
#0 RenderFlex.performLayout.<anonymous closure>
(package:flutter/src/rendering/flex.dart:926:9)
#1 RenderFlex.performLayout
(package:flutter/src/rendering/flex.dart:929:6)
#2 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#3 ChildLayoutHelper.layoutChild
(package:flutter/src/rendering/layout_helper.dart:56:11)
#4 RenderFlex._computeSizes
(package:flutter/src/rendering/flex.dart:829:43)
#5 RenderFlex.performLayout
(package:flutter/src/rendering/flex.dart:931:32)
#6 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#7 RenderFractionallySizedOverflowBox.performLayout
(package:flutter/src/rendering/shifted_box.dart:1165:14)
#8 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#9 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#10 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#11 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#12 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#13 RenderSliverList.performLayout
(package:flutter/src/rendering/sliver_list.dart:213:28)
#14 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#15 RenderSliverEdgeInsetsPadding.performLayout
(package:flutter/src/rendering/sliver_padding.dart:137:12)
#16 RenderSliverPadding.performLayout
(package:flutter/src/rendering/sliver_padding.dart:371:11)
#17 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#18 RenderViewportBase.layoutChildSequence
(package:flutter/src/rendering/viewport.dart:510:13)
#19 RenderViewport._attemptLayout
(package:flutter/src/rendering/viewport.dart:1580:12)
#20 RenderViewport.performLayout
(package:flutter/src/rendering/viewport.dart:1489:20)
#21 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#22 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#23 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#24 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#25 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#26 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#27 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#28 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#29 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#30 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#31 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#32 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#33 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#34 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#35 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#36 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#37 RenderCustomPaint.performLayout
(package:flutter/src/rendering/custom_paint.dart:545:11)
#38 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#39 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#40 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#41 MultiChildLayoutDelegate.layoutChild
(package:flutter/src/rendering/custom_layout.dart:171:12)
#42 _ScaffoldLayout.performLayout
(package:flutter/src/material/scaffold.dart:1005:7)
#43 MultiChildLayoutDelegate._callPerformLayout
(package:flutter/src/rendering/custom_layout.dart:240:7)
#44 RenderCustomMultiChildLayoutBox.performLayout
(package:flutter/src/rendering/custom_layout.dart:403:14)
#45 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#46 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#47 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#48 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#49 _RenderCustomClip.performLayout
(package:flutter/src/rendering/proxy_box.dart:1376:11)
#50 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#51 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#52 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#53 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#54 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#55 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#56 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#57 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#58 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#59 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#60 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#61 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#62 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#63 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#64 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#65 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#66 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#67 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#68 RenderOffstage.performLayout
(package:flutter/src/rendering/proxy_box.dart:3428:13)
#69 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#70 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#71 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#72 _RenderTheatre.performLayout
(package:flutter/src/widgets/overlay.dart:751:15)
#73 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#74 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#75 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#76 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#77 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#78 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#79 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#80 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#81 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#82 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#83 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#84 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#85 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#86 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#87 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#88 RenderView.performLayout
(package:flutter/src/rendering/view.dart:165:14)
#89 RenderObject._layoutWithoutResize
(package:flutter/src/rendering/object.dart:1707:7)
#90 PipelineOwner.flushLayout
(package:flutter/src/rendering/object.dart:879:18)
#91 RendererBinding.drawFrame
(package:flutter/src/rendering/binding.dart:497:19)
#92 WidgetsBinding.drawFrame
(package:flutter/src/widgets/binding.dart:883:13)
#93 RendererBinding._handlePersistentFrameCallback
(package:flutter/src/rendering/binding.dart:363:5)
#94 SchedulerBinding._invokeFrameCallback
(package:flutter/src/scheduler/binding.dart:1145:15)
#95 SchedulerBinding.handleDrawFrame
(package:flutter/src/scheduler/binding.dart:1082:9)
#96 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure>
(package:flutter/src/scheduler/binding.dart:863:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer,
dart:async, and dart:async-patch)
The following RenderObject was being processed when the exception
was fired: RenderFlex#7ff70 relayoutBoundary=up7 NEEDS-LAYOUT
NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
creator: Column ← Column ← FractionallySizedBox ← RepaintBoundary
← IndexedSemantics ←
NotificationListener<KeepAliveNotification> ← KeepAlive ←
AutomaticKeepAlive ← KeyedSubtree ←
SliverList ← MediaQuery ← SliverPadding ← ⋯
parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use
size)
constraints: BoxConstraints(0.0<=w<=314.2, 0.0<=h<=Infinity)
size: MISSING
direction: vertical
mainAxisAlignment: start
mainAxisSize: max
crossAxisAlignment: center
verticalDirection: down
This RenderObject had the following descendants (showing up to depth5):
child 1: RenderConstrainedBox#d0d25 NEEDS-LAYOUT NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
child: RenderLimitedBox#45966 NEEDS-LAYOUT NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
child: RenderConstrainedBox#fa9ce NEEDS-LAYOUT NEEDS-PAINT
child 2: RenderSemanticsAnnotations#a3bc2 NEEDS-LAYOUT
NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
child: RenderConstrainedBox#57bca NEEDS-LAYOUT NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
child: RenderCustomPaint#92487 NEEDS-LAYOUT NEEDS-PAINT
════════════════════════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: RenderBox was not laid out:
RenderFlex#7ff70 relayoutBoundary=up7 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFlex#60417 relayoutBoundary=up6 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFractionallySizedOverflowBox#f5dd4 relayoutBoundary=up5
NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderRepaintBoundary#ec457 relayoutBoundary=up4 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown:
'package:flutter/src/rendering/sliver_multi_box_adaptor.dart':
Failed assertion: line 544 pos 12: 'child.hasSize': is not true.
Another exception was thrown: Null check operator used on a null
value
Another exception was thrown: Null check operator used on a null
value
Another exception was thrown: Null check operator used on a null
value
The Flutter DevTools debugger and profiler on Android SDK built for
x86 is available at:
http://127.0.0.1:9101?uri=http://127.0.0.1:57917/zOC4HZuw9FM=/
I/flutter (13021): {access-control-allow-credentials: true, connection: keep-alive, x-cache-key: /data/2.5/onecall?exclude=minutely,hourly&lat=44.56&lon=-123.32&units=imperial, date: Tue, 08 Feb 2022 05:38:40 GMT, access-control-allow-origin: *, access-control-allow-methods: GET, POST, content-length: 4734, content-type: application/json; charset=utf-8, server: openresty}
Another exception was thrown: RenderFlex children have non-zero flexbut incoming width constraints are unbounded.
Another exception was thrown: RenderBox was not laid out:
RenderFlex#50be3 relayoutBoundary=up21 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderDecoratedBox#d59df relayoutBoundary=up20 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderPositionedBox#a36e5 relayoutBoundary=up19 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderPadding#0e4cc relayoutBoundary=up18 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderPointerListener#c57e4 relayoutBoundary=up17 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderSemanticsAnnotations#3b2b0 relayoutBoundary=up16 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderMouseRegion#e8883 relayoutBoundary=up15 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderSemanticsAnnotations#3a4ae relayoutBoundary=up14 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
_RenderInkFeatures#fe5e0 relayoutBoundary=up13 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderCustomPaint#bffd3 relayoutBoundary=up12 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderPhysicalShape#13804 relayoutBoundary=up11 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderConstrainedBox#a37f2 relayoutBoundary=up10 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
_RenderInputPadding#15d4c relayoutBoundary=up9 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderSemanticsAnnotations#8401d relayoutBoundary=up8 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFlex#a6855 relayoutBoundary=up7 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFlex#60417 relayoutBoundary=up6 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFractionallySizedOverflowBox#f5dd4 relayoutBoundary=up5
NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderRepaintBoundary#ec457 relayoutBoundary=up4 NEEDS-PAINT
Another exception was thrown:
'package:flutter/src/rendering/sliver_multi_box_adaptor.dart':
Failed assertion: line 544 pos 12: 'child.hasSize': is not true.
我发现了问题。 DailyWeatherForecast 必须有一个设定的宽度。我只是将 TextButton 包裹在一个设置了宽度的 SizedBox 中,它就可以工作了。
我正在尝试动态呈现 DailyWeatherForecast 列表,这是一个 Flutter StatelessWidget。 DailyWeatherForecast 小部件有一些变量,例如 final String month
和 final double low
,它们旨在作为一天的单一汇总预报作为窄卡。它有一个构造函数,如果我从 main.dart 向它传递硬编码值,它就会工作。它看起来很棒。
不过,信息是从 API 中提取的。所以,我不能对这些信息进行硬编码。请参阅下面的代码了解我的方法:
import 'package:flutter/material.dart';
import 'package:todo/classes/daily_weather_forecast.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:intl/intl.dart';
// `flutter run --no-sound-null-safety`
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var lat = "35";
var lon = "139";
var exclude = "minutely,hourly";
var appid = "<HIDDEN>";
var url = "https://api.openweathermap.org/data/2.5/onecall";
Map? weatherData;
//List<Map>? dailyWeather;
Iterable<int>? dailyWeather;
var now = DateTime.now();
List months = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
];
void callApis() {
debugPrint('test???');
var endpoint = url +
"?lat=" +
lat +
"&lon=" +
lon +
"&exclude=" +
exclude +
"&appid=" +
appid;
debugPrint(endpoint);
http.get(endpoint, headers: {"Accept": "application/json"}).then((result) {
setState(() {
debugPrint(result.headers.toString());
weatherData = json.decode(result.body);
if (weatherData != null) {
//dailyWeather = weatherData!['daily'];
dailyWeather =
Iterable<int>.generate(weatherData!['daily'].length).toList();
}
});
});
}
@override
void initState() {
debugPrint('test???');
//fetchWeatherData();
callApis();
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
actions: const <Widget>[
Icon(
Icons.cloud_circle,
size: 36,
//color: Colors.black54,
color: Color.fromRGBO(7, 101, 162, 1),
),
//spacing to the right
SizedBox(width: 12)
],
title: Text(
weatherData != null
? weatherData!["timezone"]
.toString() //weatherData![0]['name'].toString()
: "Weather App",
style: const TextStyle(color: Color.fromRGBO(7, 101, 162, 1))),
),
/* NOTE: ListView is RecycleView equivalent in Flutter */
body: ListView(
scrollDirection: Axis.vertical,
children: <Widget>[
FractionallySizedBox(
widthFactor: 0.8,
child: Column(
children: dailyWeather?.map(
(index) {
int i = index.round();
Map dayData = weatherData?["daily"][i];
debugPrint("DAY DATA: " + dayData.toString());
if (dayData["temp"] == null) {
return const Text("nil");
}
if (dayData["weather"] == null ||
dayData["weather"] == []) {
return const Text("nil");
}
return Row(
children: [
// spacer
Container(
height: 24,
),
DailyWeatherForecast(
month: months[now.month - 1].toString(),
day: (now.day + i).round(),
high: dayData["temp"]["max"],
low: dayData["temp"]["min"],
probability: dayData["rain"],
excerpt: dayData["weather"][0]["main"],
description: dayData["weather"][0]
["description"]),
// spacer
Container(
height: 64,
)
],
);
},
).toList() ??
[
Image.network(
"https://upload.wikimedia.org/wikipedia/commons/b/b9/Youtube_loading_symbol_1_(wobbly).gif")
],
),
),
],
),
),
);
}
}
您可以在下面看到 daily_weather_forecast.dart 文件和错误(按此顺序):
import 'package:flutter/material.dart';
class DailyWeatherForecast extends StatelessWidget {
/* Numeric day of the month */
final String month;
final int day;
final double high;
final double low;
final double probability;
/* Shorter description; "Sunny and Warm" */
final String excerpt;
/* Longer description; "Cloudless and generally warm, with a high of 75F and a low of 57F. Some high clouds late in the day." */
final String description;
/* constructors */
const DailyWeatherForecast(
{Key? key,
required this.month,
required this.day,
required this.high,
required this.low,
required this.probability,
required this.excerpt,
required this.description})
: super(key: key);
@override
Widget build(BuildContext context) {
return TextButton(
onPressed: () {
final snackBar = SnackBar(content: Text(description));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
},
child: Container(
decoration: const BoxDecoration(
color: Color.fromRGBO(7, 101, 162, 1),
borderRadius: BorderRadius.all(Radius.circular(8))),
child: Row(
children: <Widget>[
const SizedBox(width: 20, height: 64),
Column(
children: [
Text(month,
style:
const TextStyle(color: Colors.white, fontSize: 12)),
Text(day.toString(),
style:
const TextStyle(color: Colors.white, fontSize: 18))
],
),
const SizedBox(width: 20),
Text(low.toString() + "F",
style: const TextStyle(color: Colors.white, fontSize: 20)),
const Spacer(),
Column(
children: [
Text(excerpt,
style: const TextStyle(
color: Colors.white, fontWeight: FontWeight.w600)),
Text(probability.toString() + "% precipation",
style: const TextStyle(color: Colors.white70)),
],
),
const Spacer(),
Text(high.toString() + "F",
style: const TextStyle(color: Colors.white, fontSize: 20)),
const SizedBox(width: 20),
],
)));
}
}
这是完整的终端输出(删除了 DAY DATA 日志,以保持字符数限制):
√ Built build\app\outputs\flutter-apk\app-debug.apk.
I/flutter (13021): test???
I/flutter (13021): test???
I/flutter (13021): ENDPOINT: https://api.openweathermap.org/data/2.5/onecall?lat=44.5630283&lon=-123.3185558&exclude=minutely,hourly&units=imperial&appid=1402ba071d730e537b18335ee1dcbdb2
Syncing files to device Android SDK built for x86...
149ms
Flutter run key commands.
r Hot reload.
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
Running with unsound null safety
For more information see
https://dart.dev/null-safety/unsound-null-safety
An Observatory debugger and profiler on Android SDK built for x86 isavailable at: http://127.0.0.1:57917/zOC4HZuw9FM=/
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY
╞═════════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
RenderFlex children have non-zero flex but incoming height
constraints are unbounded.
When a column is in a parent that does not provide a finite height
constraint, for example if it is
in a vertical scrollable, it will try to shrink-wrap its children
along the vertical axis. Setting a
flex on a child (e.g. using Expanded) indicates that the child is toexpand to fill the remaining
space in the vertical direction.
These two directives are mutually exclusive. If a parent is to
shrink-wrap its child, the child
cannot simultaneously expand to fit its parent.
Consider setting mainAxisSize to MainAxisSize.min and using
FlexFit.loose fits for the flexible
children (using Flexible rather than Expanded). This will allow the
flexible children to size
themselves to less than the infinite remaining space they would
otherwise be forced to take, and
then will cause the RenderFlex to shrink-wrap the children rather
than expanding to fit the maximum
constraints provided by the parent.
If this message did not help you determine the problem, consider
using debugDumpRenderTree():
https://flutter.dev/debugging/#rendering-layer
http://api.flutter.dev/flutter/rendering/debugDumpRenderTree.html
The affected RenderFlex is:
RenderFlex#7ff70 relayoutBoundary=up7 NEEDS-LAYOUT NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE(creator: Column ← Column ←
FractionallySizedBox ← RepaintBoundary ← IndexedSemantics ←
NotificationListener<KeepAliveNotification> ← KeepAlive ←
AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ←
SliverPadding ← ⋯, parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use size), constraints:
BoxConstraints(0.0<=w<=314.2, 0.0<=h<=Infinity), size: MISSING,
direction: vertical, mainAxisAlignment: start, mainAxisSize: max,
crossAxisAlignment: center, verticalDirection: down)
The creator information is set to:
Column ← Column ← FractionallySizedBox ← RepaintBoundary ←
IndexedSemantics ←
NotificationListener<KeepAliveNotification> ← KeepAlive ←
AutomaticKeepAlive ← KeyedSubtree ←
SliverList ← MediaQuery ← SliverPadding ← ⋯
See also: https://flutter.dev/layout/
If none of the above helps enough to fix this problem, please don't
hesitate to file a bug:
https://github.com/flutter/flutter/issues/new?template=2_bug.md
The relevant error-causing widget was:
Column
Column:file:///C:/Users/Lucas%20Pichette/Desktop/School/W22/CS492_ Mobile_Software_Dev/assignment2-api/todo/lib/main.dart:162:29
When the exception was thrown, this was the stack:
#0 RenderFlex.performLayout.<anonymous closure>
(package:flutter/src/rendering/flex.dart:926:9)
#1 RenderFlex.performLayout
(package:flutter/src/rendering/flex.dart:929:6)
#2 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#3 ChildLayoutHelper.layoutChild
(package:flutter/src/rendering/layout_helper.dart:56:11)
#4 RenderFlex._computeSizes
(package:flutter/src/rendering/flex.dart:829:43)
#5 RenderFlex.performLayout
(package:flutter/src/rendering/flex.dart:931:32)
#6 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#7 RenderFractionallySizedOverflowBox.performLayout
(package:flutter/src/rendering/shifted_box.dart:1165:14)
#8 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#9 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#10 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#11 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#12 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#13 RenderSliverList.performLayout
(package:flutter/src/rendering/sliver_list.dart:213:28)
#14 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#15 RenderSliverEdgeInsetsPadding.performLayout
(package:flutter/src/rendering/sliver_padding.dart:137:12)
#16 RenderSliverPadding.performLayout
(package:flutter/src/rendering/sliver_padding.dart:371:11)
#17 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#18 RenderViewportBase.layoutChildSequence
(package:flutter/src/rendering/viewport.dart:510:13)
#19 RenderViewport._attemptLayout
(package:flutter/src/rendering/viewport.dart:1580:12)
#20 RenderViewport.performLayout
(package:flutter/src/rendering/viewport.dart:1489:20)
#21 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#22 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#23 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#24 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#25 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#26 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#27 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#28 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#29 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#30 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#31 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#32 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#33 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#34 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#35 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#36 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#37 RenderCustomPaint.performLayout
(package:flutter/src/rendering/custom_paint.dart:545:11)
#38 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#39 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#40 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#41 MultiChildLayoutDelegate.layoutChild
(package:flutter/src/rendering/custom_layout.dart:171:12)
#42 _ScaffoldLayout.performLayout
(package:flutter/src/material/scaffold.dart:1005:7)
#43 MultiChildLayoutDelegate._callPerformLayout
(package:flutter/src/rendering/custom_layout.dart:240:7)
#44 RenderCustomMultiChildLayoutBox.performLayout
(package:flutter/src/rendering/custom_layout.dart:403:14)
#45 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#46 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#47 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#48 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#49 _RenderCustomClip.performLayout
(package:flutter/src/rendering/proxy_box.dart:1376:11)
#50 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#51 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#52 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#53 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#54 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#55 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#56 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#57 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#58 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#59 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#60 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#61 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#62 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#63 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#64 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#65 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#66 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#67 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#68 RenderOffstage.performLayout
(package:flutter/src/rendering/proxy_box.dart:3428:13)
#69 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#70 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#71 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#72 _RenderTheatre.performLayout
(package:flutter/src/widgets/overlay.dart:751:15)
#73 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#74 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#75 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#76 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#77 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#78 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#79 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#80 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#81 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#82 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#83 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#84 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#85 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#86 RenderProxyBoxMixin.performLayout
(package:flutter/src/rendering/proxy_box.dart:116:14)
#87 RenderObject.layout
(package:flutter/src/rendering/object.dart:1852:7)
#88 RenderView.performLayout
(package:flutter/src/rendering/view.dart:165:14)
#89 RenderObject._layoutWithoutResize
(package:flutter/src/rendering/object.dart:1707:7)
#90 PipelineOwner.flushLayout
(package:flutter/src/rendering/object.dart:879:18)
#91 RendererBinding.drawFrame
(package:flutter/src/rendering/binding.dart:497:19)
#92 WidgetsBinding.drawFrame
(package:flutter/src/widgets/binding.dart:883:13)
#93 RendererBinding._handlePersistentFrameCallback
(package:flutter/src/rendering/binding.dart:363:5)
#94 SchedulerBinding._invokeFrameCallback
(package:flutter/src/scheduler/binding.dart:1145:15)
#95 SchedulerBinding.handleDrawFrame
(package:flutter/src/scheduler/binding.dart:1082:9)
#96 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure>
(package:flutter/src/scheduler/binding.dart:863:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer,
dart:async, and dart:async-patch)
The following RenderObject was being processed when the exception
was fired: RenderFlex#7ff70 relayoutBoundary=up7 NEEDS-LAYOUT
NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
creator: Column ← Column ← FractionallySizedBox ← RepaintBoundary
← IndexedSemantics ←
NotificationListener<KeepAliveNotification> ← KeepAlive ←
AutomaticKeepAlive ← KeyedSubtree ←
SliverList ← MediaQuery ← SliverPadding ← ⋯
parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use
size)
constraints: BoxConstraints(0.0<=w<=314.2, 0.0<=h<=Infinity)
size: MISSING
direction: vertical
mainAxisAlignment: start
mainAxisSize: max
crossAxisAlignment: center
verticalDirection: down
This RenderObject had the following descendants (showing up to depth5):
child 1: RenderConstrainedBox#d0d25 NEEDS-LAYOUT NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
child: RenderLimitedBox#45966 NEEDS-LAYOUT NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
child: RenderConstrainedBox#fa9ce NEEDS-LAYOUT NEEDS-PAINT
child 2: RenderSemanticsAnnotations#a3bc2 NEEDS-LAYOUT
NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
child: RenderConstrainedBox#57bca NEEDS-LAYOUT NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
child: RenderCustomPaint#92487 NEEDS-LAYOUT NEEDS-PAINT
════════════════════════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: RenderBox was not laid out:
RenderFlex#7ff70 relayoutBoundary=up7 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFlex#60417 relayoutBoundary=up6 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFractionallySizedOverflowBox#f5dd4 relayoutBoundary=up5
NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderRepaintBoundary#ec457 relayoutBoundary=up4 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown:
'package:flutter/src/rendering/sliver_multi_box_adaptor.dart':
Failed assertion: line 544 pos 12: 'child.hasSize': is not true.
Another exception was thrown: Null check operator used on a null
value
Another exception was thrown: Null check operator used on a null
value
Another exception was thrown: Null check operator used on a null
value
The Flutter DevTools debugger and profiler on Android SDK built for
x86 is available at:
http://127.0.0.1:9101?uri=http://127.0.0.1:57917/zOC4HZuw9FM=/
I/flutter (13021): {access-control-allow-credentials: true, connection: keep-alive, x-cache-key: /data/2.5/onecall?exclude=minutely,hourly&lat=44.56&lon=-123.32&units=imperial, date: Tue, 08 Feb 2022 05:38:40 GMT, access-control-allow-origin: *, access-control-allow-methods: GET, POST, content-length: 4734, content-type: application/json; charset=utf-8, server: openresty}
Another exception was thrown: RenderFlex children have non-zero flexbut incoming width constraints are unbounded.
Another exception was thrown: RenderBox was not laid out:
RenderFlex#50be3 relayoutBoundary=up21 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderDecoratedBox#d59df relayoutBoundary=up20 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderPositionedBox#a36e5 relayoutBoundary=up19 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderPadding#0e4cc relayoutBoundary=up18 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderPointerListener#c57e4 relayoutBoundary=up17 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderSemanticsAnnotations#3b2b0 relayoutBoundary=up16 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderMouseRegion#e8883 relayoutBoundary=up15 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderSemanticsAnnotations#3a4ae relayoutBoundary=up14 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
_RenderInkFeatures#fe5e0 relayoutBoundary=up13 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderCustomPaint#bffd3 relayoutBoundary=up12 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderPhysicalShape#13804 relayoutBoundary=up11 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderConstrainedBox#a37f2 relayoutBoundary=up10 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
_RenderInputPadding#15d4c relayoutBoundary=up9 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderSemanticsAnnotations#8401d relayoutBoundary=up8 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFlex#a6855 relayoutBoundary=up7 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFlex#60417 relayoutBoundary=up6 NEEDS-PAINT
NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderFractionallySizedOverflowBox#f5dd4 relayoutBoundary=up5
NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
Another exception was thrown: RenderBox was not laid out:
RenderRepaintBoundary#ec457 relayoutBoundary=up4 NEEDS-PAINT
Another exception was thrown:
'package:flutter/src/rendering/sliver_multi_box_adaptor.dart':
Failed assertion: line 544 pos 12: 'child.hasSize': is not true.
我发现了问题。 DailyWeatherForecast 必须有一个设定的宽度。我只是将 TextButton 包裹在一个设置了宽度的 SizedBox 中,它就可以工作了。