[英]how to use another class property in flutter/dart
我有一個日歷,我想在另一個類中使用它的日期屬性,我已經嘗試創建對象,但這在這里不起作用是我嘗試實例化的
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'),),
);
}
}
您實際上是在嘗試訪問 MyCalendar狀態的屬性,而不是 MyCalendar 本身的屬性。 要公開狀態,您可以參考此答案如何訪問在 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,
));
}
}
注意我已經刪除了日期前面的靜態,因為您可能想要更改日期,並且無法通過 currentState 訪問靜態成員。 如果您不需要 DateTime.now() 以外的任何日期,那么您可能不需要訪問小部件狀態,只需直接從其他小部件引用 DateTime.now() 即可。
class MyCalendar extends StatefulWidget {
DateTime date = DateTime.now();
@override
_MyCalendarState createState() => _MyCalendarState();
}
並在_MyCalendarState
使用widget.date
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.