簡體   English   中英

如何在 flutter/dart 中使用另一個類屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM