如何在flutter / dart中使用另一个类属性

时间:2020-10-14 07:43:31

标签: flutter dart

我有一个日历,我想在另一个已经尝试创建对象的类中使用其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'),),
    );
  }
}

2 个答案:

答案 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