在页面之间的Flutter中传递数据

问题描述 投票:0回答:1

嘿,所以我将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

所以我不知道如何将该信息传递给此页面

flutter dart widget data-storage data-sharing
1个回答
0
投票

[我相信您现在发布的代码是错误的,因为您试图在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方法,因为它不是静态字段,因此您无法在创建状态之前对其进行访问

© www.soinside.com 2019 - 2024. All rights reserved.