【发布时间】:2019-08-20 02:12:28
【问题描述】:
几天前我开始使用颤振,我在这里遇到了DateTime 包的一些问题。我正在尝试实现一种方法,该方法必须检查实际日期是星期一还是星期四等,然后它应该返回一个被添加到 _actualDatetimeUnformatted.add 函数的值。会不会是DateTime的add函数有问题,所以无法接收到方法的返回值days?
这是完整的代码。问题出在static var _weekEndDatetimeUnformatted = _actualDatetimeUnformatted.add(new Duration(days: getWeekday(_actualDatetimeUnformatted))); 变量中。当我将值更改为 50 时,它会起作用。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: new ThemeData(
brightness: Brightness.dark,
primaryColorBrightness: Brightness.dark,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// GETTING ACTUAL DATE
static var _actualDatetimeUnformatted = new DateTime.now();
// DATETIME OBJECT TOO, LIKE _actualDatetimeUnformatted BUT WITH A FEW DAYS ADDED TO IT (TO GET THE END OF THE WEEK!)
static var _weekEndDatetimeUnformatted = _actualDatetimeUnformatted.add(
new Duration(days: getWeekday(_actualDatetimeUnformatted))); // RED SCREEN MISTAKE SOMEWHERE HERE IN "getWeekday" method!
// GET MONTH, DAY, YEAR (AS END OF WEEK)
static getWeekday(_actualDatetimeUnformatted) {
if (_actualDatetimeUnformatted.weekday == DateTime.monday) {
return 6;
} else if (_actualDatetimeUnformatted.weekday == DateTime.tuesday) {
return 5;
} else if (_actualDatetimeUnformatted.weekday == DateTime.wednesday) {
return 4;
} else if (_actualDatetimeUnformatted.weekday == DateTime.thursday) {
return 3;
} else if (_actualDatetimeUnformatted.weekday == DateTime.friday) {
return 2;
} else if (_actualDatetimeUnformatted.weekday == DateTime.saturday) {
return 1;
} else if (_actualDatetimeUnformatted.weekday == DateTime.sunday) {
return 0;
}
}
// GET MONTH, DAY (AS START OF WEEK)
static var formatterWeekdayAll = new DateFormat("MMM d");
// GET WEEKDAY
static var formatterDay = new DateFormat("EEEE");
// GETTING WEEKDAY FOR SELECTED DAY (above the weekdays)
String _selectedDay = formatterDay.format(_actualDatetimeUnformatted);
// RETURNING WEEKDAY FOR APP TEXT AS WELL AS END OF WEEK CALCULATED FROM THE DAY OF _WEEKDAY (above the current day (_selectedDay))
String _Weekday = formatterWeekdayAll.format(_actualDatetimeUnformatted); //WORKS
String _WeekdayEnd = formatterWeekdayAll.format(_weekEndDatetimeUnformatted);
String text = "Some Note...";
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: ListView(
children: <Widget>[
Stack(
children: <Widget>[
Container(
height: 380.0,
),
ShaderMask(
shaderCallback: (rect) {
return LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.black, Colors.transparent])
.createShader(
Rect.fromLTRB(0, 0, rect.width, rect.height));
},
blendMode: BlendMode.dstIn,
child: Image.asset('assets/milchstraße.jpg',
height: 300.0, fit: BoxFit.cover)),
RotatedBox(
quarterTurns: 0,
child: Text('Weekly Planner',
style: TextStyle(
fontSize: 55,
fontWeight: FontWeight.bold,
color: Colors.white.withOpacity(0.35),
letterSpacing: 10.0)),
),
Positioned(
top: 4.0,
right: 4.0,
child: Container(
height: 40.0,
width: 40.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20.0),
color: Colors.white),
child: Center(
child: Icon(Icons.menu),
),
),
),
Positioned(
top: 2.0,
right: 5.0,
child: Container(
height: 12.0,
width: 12.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.0),
color: Color(0xFFFD3664)),
),
),
Positioned(
top: 170.0,
left: 10.0,
child: Column(
children: <Widget>[
Text("It's week:",
style: TextStyle(
fontFamily: 'Oswald-Light',
fontSize: 25.0,
fontWeight: FontWeight.w500,
color: Colors.white))
],
)),
Positioned(
top: 280.0,
left: 120.0,
child: Column(
children: <Widget>[
Text("$_selectedDay",
style: TextStyle(
fontFamily: 'Oswald-Light',
fontSize: 40.0,
fontWeight: FontWeight.w500,
color: Colors.white))
],
)),
Positioned(
top: 210.0,
left: 10.0,
child: Column(
children: <Widget>[
Row(
children: <Widget>[
Text('From $_Weekday. to $_WeekdayEnd.',
style: TextStyle(
fontFamily: 'Oswald-Light',
fontSize: 35.0,
fontWeight: FontWeight.bold,
color: Color(0xFFFD3664))),
],
)
],
)),
],
),
Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
_buildWeekDays('Monday', Icons.calendar_today, text),
_buildWeekDays('Tuesday', Icons.calendar_today, text),
_buildWeekDays('Wednesday', Icons.calendar_today, text),
_buildWeekDays('Thursday', Icons.calendar_today, text),
]),
Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
_buildWeekDays('Friday', Icons.calendar_today, text),
_buildWeekDays('Saturday', Icons.calendar_today, text),
_buildWeekDays('Sunday', Icons.calendar_today, text),
]),
]));
}
Widget _buildWeekDays(String day, iconData, text) {
return InkWell(
splashColor: Colors.transparent,
onTap: () {
_WeekPlanRoute(day, text); // MISTAKE SOMEWHERE IN THIS METHOD!!!
},
child: AnimatedContainer(
curve: Curves.easeIn,
duration: Duration(microseconds: 300),
height: _selectedDay == 'day' ? 100.0 : 100.0,
width: _selectedDay == 'day' ? 100.0 : 75.0,
color: _selectedDay == 'day' ? Color(0xFFFD3566) : Colors.transparent,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
iconData,
color: _selectedDay == day ? Colors.white : Colors.grey,
size: 40.0,
),
SizedBox(height: 10.0),
Text(day,
style: TextStyle(
fontFamily: 'Oswald-Light',
color: _selectedDay == day ? Colors.white : Colors.grey,
fontSize: 15.0))
],
)),
);
}
void _WeekPlanRoute(day, text) {
selectMenuOption(day);
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'$day',
textAlign: TextAlign.center,
style: TextStyle(
fontFamily: 'Oswald-Light',
color: Color(0xFFFD3566),
fontWeight: FontWeight.bold,
fontSize: 35,
),
),
),
body: new Container(
margin: const EdgeInsets.symmetric(
horizontal: 10.0, vertical: 5.0),
padding: const EdgeInsets.symmetric(
horizontal: 15.0, vertical: 10.0),
decoration: new BoxDecoration(
color: Colors.green.shade200.withOpacity(0.3),
borderRadius: new BorderRadius.circular(5.0),
),
child: new IntrinsicHeight(
child: new Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
new Container(
margin: const EdgeInsets.only(
top: 4.0, bottom: 4.0, right: 10.0),
child: Text(
text, // DYNAMICALLY FOR USERS!
textAlign: TextAlign.justify,
overflow: TextOverflow.ellipsis,
maxLines: 3,
style: TextStyle(
fontFamily: 'Oswald-Light',
fontSize: 20,
fontWeight: FontWeight.w200,
color: Colors.white,
),
),
),
new Container(
margin: EdgeInsets.symmetric(horizontal: 5.0),
child: InkWell(
child: Icon(
Icons.star_border,
size: 40,
),
onTap: () {
setToFav(text);
},
onDoubleTap: () {
// DELETE COLOR FROM THE STAR
// DELETE IT FROM ARRAY OF IMPORTANT NOTES!
},
),
),
],
),
),
),
);
}
),
);
}
selectMenuOption(String day) {
setState(() {
_selectedDay = day;
});
}
setToFav(String text) {
setState(() {
//final bool favourized = _saved.contains(pair)
});
}
}
我已经阅读了错误消息,但它对我并没有真正的帮助 xD。我来自 Python 领域,这意味着我熟悉简短、有用的错误消息:D。
I/flutter (28798): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (28798): The following NoSuchMethodError was thrown building Builder:
I/flutter (28798): The getter 'month' was called on null.
I/flutter (28798): Receiver: null
I/flutter (28798): Tried calling: month
I/flutter (28798): User-created ancestor of the error-causing widget was:
I/flutter (28798): MaterialApp
I/flutter (28798): file:///C:/Users/tim-a/Desktop/AndroidStudioProjects/Flutter/wochenplaner/lib/main.dart:14:12
I/flutter (28798): When the exception was thrown, this was the stack:
I/flutter (28798): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5)
I/flutter (28798): #1 _DateFormatPatternField.formatMonth (package:intl/src/intl/date_format_field.dart:445:41)
I/flutter (28798): #2 _DateFormatPatternField.formatField (package:intl/src/intl/date_format_field.dart:367:16)
I/flutter (28798): #3 _DateFormatPatternField.format (package:intl/src/intl/date_format_field.dart:244:12)
I/flutter (28798): #4 DateFormat.format.<anonymous closure> (package:intl/src/intl/date_format.dart:255:57)
I/flutter (28798): #5 List.forEach (dart:core-patch/growable_array.dart:278:8)
I/flutter (28798): #6 DateFormat.format (package:intl/src/intl/date_format.dart:255:19)
I/flutter (28798): #7 new _MyHomePageState (package:wochenplaner/main.dart:69:44)
I/flutter (28798): #8 MyHomePage.createState (package:wochenplaner/main.dart:27:37)
I/flutter (28798): #9 new StatefulElement (package:flutter/src/widgets/framework.dart:4016:25)
I/flutter (28798): #10 StatefulWidget.createElement (package:flutter/src/widgets/framework.dart:802:38)
I/flutter (28798): #11 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3091:40)
I/flutter (28798): #12 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12)
I/flutter (28798): #13 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5119:14)
I/flutter (28798): #14 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3093:14)
I/flutter (28798): #15 Element.updateChild (package:flutter/src/widgets/framework.dart:2896:12)
I/flutter (28798): #16 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16)
I/flutter (28798): #17 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5)
I/flutter (28798): #18 StatelessElement.update (package:flutter/src/widgets/framework.dart:4008:5)
I/flutter (28798): #19 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #20 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5126:14)
I/flutter (28798): #21 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #22 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5126:14)
I/flutter (28798): #23 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #24 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5126:14)
I/flutter (28798): #25 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #26 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5126:14)
I/flutter (28798): #27 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #28 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16)
I/flutter (28798): #29 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5)
I/flutter (28798): #30 StatefulElement.update (package:flutter/src/widgets/framework.dart:4112:5)
I/flutter (28798): #31 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #32 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16)
I/flutter (28798): #33 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5)
I/flutter (28798): #34 StatelessElement.update (package:flutter/src/widgets/framework.dart:4008:5)
I/flutter (28798): #35 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #36 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16)
I/flutter (28798): #37 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5)
I/flutter (28798): #38 StatefulElement.update (package:flutter/src/widgets/framework.dart:4112:5)
I/flutter (28798): #39 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #40 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5126:14)
I/flutter (28798): #41 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #42 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16)
I/flutter (28798): #43 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5)
I/flutter (28798): #44 ProxyElement.update (package:flutter/src/widgets/framework.dart:4246:5)
I/flutter (28798): #45 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:94:11)
I/flutter (28798): #46 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #47 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5126:14)
I/flutter (28798): #48 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #49 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16)
I/flutter (28798): #50 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5)
I/flutter (28798): #51 StatefulElement.update (package:flutter/src/widgets/framework.dart:4112:5)
I/flutter (28798): #52 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #53 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16)
I/flutter (28798): #54 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5)
I/flutter (28798): #55 StatelessElement.update (package:flutter/src/widgets/framework.dart:4008:5)
I/flutter (28798): #56 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #57 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5126:14)
I/flutter (28798): #58 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #59 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16)
I/flutter (28798): #60 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5)
I/flutter (28798): #61 ProxyElement.update (package:flutter/src/widgets/framework.dart:4246:5)
I/flutter (28798): #62 Element.updateChild (package:flutter/src/widgets/framework.dart:2885:15)
I/flutter (28798): #63 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3953:16)
I/flutter (28798): #64 Element.rebuild (package:flutter/src/widgets/framework.dart:3730:5)
I/flutter (28798): #65 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2340:33)
I/flutter (28798): #66 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:701:20)
I/flutter (28798): #67 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:285:5)
I/flutter (28798): #68 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1033:15)
I/flutter (28798): #69 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:975:9)
I/flutter (28798): #70 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:784:7)
I/flutter (28798): #72 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:382:19)
I/flutter (28798): #73 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:416:5)
I/flutter (28798): #74 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
I/flutter (28798): (elided one frame from package dart:async-patch)
I/flutter (28798): ════════════════════════════════════════════════════════════════════════════════════════════════════
我不明白为什么它说我是The getter 'month' was called on null,即使我在getWeekday 中什至不使用月份。
提前非常感谢!
【问题讨论】:
-
The getter 'month' was called on null表示null某处最终被传递为DateTime,并且某些东西试图访问其month成员。我建议您添加asserts 以验证事情不是null,当您不期望时。 -
我自己运行应用程序,点击底部区域的按钮时没有发现错误。这是演示imgur.com/a/UjRM5tP。我使用 intl: ^0.15.8 和 dart 2.4.1
-
@jamesdlin 感谢您的解释...我将通过代码搜索自己并尝试找出试图访问
month成员的内容。您是否建议在getWeekday方法中添加asserts?我怎么能做到这一点?感谢您的帮助! -
@ejabu 我也试过了,由于一些奇怪的原因它现在可以工作了......让我们等到明天看看它是否也能工作。 xD
标签: android-studio datetime flutter dart