嘿,所以我将dateTime作为变量存储在我的一个应用页面中,我想在另一个页面上接收它,但是遇到了问题,
这是我将日期时间存储在变量中的位置:
import 'package:cycle/pages/homePage.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class DatePicker extends StatefulWidget {
@override
_DatePickerState createState() => _DatePickerState();
}
//Today's Date
DateTime _currentdate = new DateTime.now();
//Storing the date time here
var lastMenusEnd ;
//Using date picker to get last menus
Future<Null> _selectdate(BuildContext context) async{
final DateTime _seldate = await showDatePicker(
context: context,
initialDate: _currentdate,
firstDate: DateTime(2020),
lastDate: DateTime(2100),
builder: (context,child) {
return Theme(
data: Theme.of(context).copyWith(
primaryColor: Colors.pinkAccent[200],
),
child: SingleChildScrollView(child: child,)
);
}
);
if(_seldate!=null) {
lastMenusEnd = _seldate;
Home(lastmenus: lastMenusEnd); // This is what am using to send it to the home page
}
}
class _DatePickerState extends State<DatePicker> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Align(
alignment: Alignment.center,
child: Column(
children : <Widget>[
Text(
'Hello',
textScaleFactor : 1,
style: TextStyle(
color: Colors.black,
fontFamily: 'Comic',
fontSize: 24
),
),
Text(
'Please insert correct details',
textScaleFactor : 1,
style: TextStyle(
color: Colors.black,
fontFamily: 'Comic',
fontSize: 24
),
),
Row(
children : <Widget>[
Text(
'When did your last menustration end ?',
textScaleFactor : 1,
style: TextStyle(
color: Colors.black,
fontFamily: 'Comic',
fontSize: 24
),
),
SizedBox(width: 16),
IconButton(onPressed: (){
_selectdate(context);
},icon: Icon(
Icons.calendar_today,
color: Colors.black,
),
),
]
),
]
),
),
),
);
}
}
这是我尝试检索数据但无法获取的地方:
import 'package:cycle/animation/animationReflectly.dart';
import 'package:cycle/model/date.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:flutter/cupertino.dart';
class Home extends StatefulWidget {
DateTime lastmenus;
Home({this.lastmenus});
@override
_HomeState createState() => _HomeState();
}
// Getting the present day
DateTime _currentdate = new DateTime.now();
//Using date picker to get last menus
//it returns an error here
DateTime lastMenusEnd = Home.lastmenus;
// cycle1
var d25 = lastMenusEnd.add(new Duration(days: 25));//minor alert
var d26 = lastMenusEnd.add(new Duration(days: 26));//minor alert
var d27 = lastMenusEnd.add(new Duration(days: 27));//minor alert
var d28 = lastMenusEnd.add(new Duration(days: 28));//major
var d29 = lastMenusEnd.add(new Duration(days: 29));//major
var d30 = lastMenusEnd.add(new Duration(days: 30));//major
var d31 = lastMenusEnd.add(new Duration(days: 31));//major ....
var d32 = lastMenusEnd.add(new Duration(days: 32));//major
var d33 = lastMenusEnd.add(new Duration(days: 33));//major
var d34 = lastMenusEnd.add(new Duration(days: 34));//minor alert
var d35 = lastMenusEnd.add(new Duration(days: 35));//minor alert
var d36 = lastMenusEnd.add(new Duration(days: 36));//minor alert
所以我不知道如何将该信息传递给此页面
[我相信您现在发布的代码是错误的,因为您试图在DateTime lastMenusEnd = Home.lastmenus;
行中使用Home类,而从未创建home类的实例。您可以发布它给您的错误吗?由于该代码不存在于任何类或方法之内,如我所见,它可能会运行,但在应用程序内部将无法使用。
此外,您也将Home类作为StatefulWidget,并运行createState方法,但是我看不到在何处定义_HomeState()
类。您将可以访问_HomeState()
或Home
类本身内部的lastmenus变量,但是在_HomeState()中这样做将需要您访问widget.lastmenus
。
更新:由于您尚未创建Home实例,并尝试访问其上不是静态的且未初始化的变量,因此您遇到了静态访问错误。我认为要实现您想要的目标,您需要创建一个_HomeState并将所有逻辑移到其中。
快速更新代码以完成此操作:
class Home extends StatefulWidget {
final DateTime lastmenus;
Home({this.lastmenus});
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
DateTime _currentdate = new DateTime.now();
DateTime lastMenusEnd;
@override
void initState() {
super.initState();
lastMenusEnd = widget.lastmenus;
}
@override
Widget build(BuildContext context) {
print(widget.lastmenus);
return Container();
}
}
我将对lastMenusEnd的访问权限移至了build方法,因为它不是静态字段,因此您无法在创建状态之前对其进行访问