首页 > 解决方案 > Flutter Navigator.pop 不会发回数据

问题描述

到目前为止,这是我的代码。我不知道出了什么问题,我也尝试了很多 youtube turolial 和其他东西,但看起来流行音乐不会返回正确的数据。我真的需要帮助,我已经花了 2 天了

void main() {
  List<String> names = [];
  List<String> mgs = [];

  runApp(MaterialApp(
    title: 'Returning Data',
    home: HomeScreen(names, mgs),
  ));
}

class HomeScreen extends StatelessWidget {
  List<String> names = [];
  List<String> mgs = [];

  HomeScreen(this.names, this.mgs);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.blue,
        title: Text("Project_Drink"),

      ),
      body: Container(
        child: Column(
          children: <Widget>[
            new Expanded(
                child:  ListView.builder
                  (
                    itemCount: mgs.length,
                    itemBuilder: (context, Index) {
                      return Text("Name: " + names[Index]
                          +" "+ "Mg: " + mgs[Index]);
                    }
                )
            )


          ],

        ),


      ),


      bottomNavigationBar :BottomAppBar  (

        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Row(
            children: <Widget>[
              const Expanded(child: Text("TOTAL : 200")),
              FloatingActionButton(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => AddProduct()),
                  );
                },
                child: Icon(Icons.add),

              ),


            ],
          ),
        ),
      ),

    );
  }

}

这是我希望它发送回数据的 AddProduct,然后我应该能够将其放入列表中。Lika 不是垫


class AddProduct extends StatefulWidget {
  @override
  State createState() => new _AddProductState();
}


class _AddProductState extends State<AddProduct> {
  List<String> names = [];
  List<String> mgs = [];


  //final TextEditingController eCtrl = new TextEditingController();
  final nameController = TextEditingController();
  final mgController = TextEditingController();


  @override
  Widget build (BuildContext ctxt) {
    return new Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.blue,
          title: Text("New Drink"),

        ),

        body: new Column(
          children: <Widget>[
            new TextField(
              decoration: InputDecoration(
                hintText: "Name",
              ),
              controller: nameController,

            ),

            new TextField(
              decoration: InputDecoration(
                hintText: "Mg",
                suffixText: "Mg",
              ),
              controller: mgController,

            ),
            RaisedButton(
              onPressed: (){
                names.add(nameController.text);
                mgs.add(mgController.text);
                setState(() {});
                nameController.clear();
                mgController.clear();
                Navigator.pop(context, names + mgs);

              },
              child: Text("ADD"),

            ),

          ],
        )
    );
  }
}

标签: android-studioflutter

解决方案


用简单的方法试试这个,当按下然后调用这个方法

 goToView() async {
bool data=await   Navigator.push(context, new CupertinoPageRoute(builder:   (BuildContext context) {
  return new CoolForgot();
}));
 print(data);
  }

我的下一个视图是忘记屏幕,所以我使用了 CoolForgot(),您可以根据您的要求使用。

然后当按下下一个视图中的后退按钮时(在我的情况下为 CoolForgot())调用这个

 Navigator.pop(context,true);

我已经传递 bool 值并获取 bool 值,您可以传递任何类型的对象并从中获取。


推荐阅读