我有一个日历,我想在另一个已经尝试创建对象的类中使用其date属性,但这不起作用 这是我尝试实例化的内容
var myCalender = MyCalendar();
在课堂上我想说些类似的话
Text('$myCalendar.date');
这是我的日历班
class MyCalendar extends StatefulWidget {
@override
_MyCalendarState createState() => _MyCalendarState();
}
class _MyCalendarState extends State<MyCalendar> {
static DateTime date = DateTime.now();
TimeOfDay timeOfday = TimeOfDay.now();
Future<Null> selectDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
//show date picker Entrances i did not copy those to make the code shorter for you :)
if (picked != null && picked != date) {
print('date is ${date.toString()}');
}
}
@override
Widget build(BuildContext context) {
return Container(
child: FlatButton(
onPressed: () {selectDate(context);},
child: Text('calendar'),
color: Colors.blue,
));
}
}
这是我的main.dart全局密钥
void main() {
runApp(MyApp());
}
final key = GlobalKey<State<CustomCalendar>>();
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Container(child: Text('data'),),
);
}
}
答案 0 :(得分:0)
您实际上是在尝试访问MyCalendar的 state 的属性,而不是MyCalendar本身的属性。要公开状态,您可以参考答案how to access an object created in one stateful widget in another stateful widget in flutter并像这样实现它,例如:
final key = new GlobalKey<_MyCalendarState>();
void test(){
print(key.currentState.date.toString());
}
class MyCalendar extends StatefulWidget {
MyCalendar({Key key}) : super(key: key);
@override
_MyCalendarState createState() => _MyCalendarState();
}
class _MyCalendarState extends State<MyCalendar> {
DateTime date = DateTime.now();
TimeOfDay timeOfday = TimeOfDay.now();
Future<Null> selectDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
//show date picker Entrances i did not copy those to make the code shorter for you :)
if (picked != null && picked != date) {
print('date is ${date.toString()}');
}
}
@override
Widget build(BuildContext context) {
return Container(
child: FlatButton(
onPressed: () {selectDate(context);},
child: Text('calendar'),
color: Colors.blue,
));
}
}
请注意,我删除了date前面的static,因为您可能想更改日期,并且static成员无法通过currentState访问。如果您不需要date可以是DateTime.now()之外的任何其他内容,那么您可能不需要访问小部件状态,可以直接从另一个小部件中引用DateTime.now()。
答案 1 :(得分:-1)
class MyCalendar extends StatefulWidget {
DateTime date = DateTime.now();
@override
_MyCalendarState createState() => _MyCalendarState();
}
,在_MyCalendarState
中使用widget.date