如何跨有状态小部件传递数据?

时间:2021-04-29 15:29:26

标签: firebase flutter flutter-showmodalbottomsheet

所以我的问题是我从第一个小部件中的 firebase 获取数据,然后我单击并通过 void 打开一个底部表 -> 另一个有状态小部件,我如何将快照数据从第一个小部件传递给另一个小部件?

下面的代码不起作用...

....
Widget build(BuildContext context) {
          return Container(
              ElevatedButton(
                    child: Text('Request a tour'),
                    onPressed: () {
                      displayBottomSheet(context, widget.snapshot.data()["author"]);
                    },
                  ),
                );


    void displayBottomSheet(BuildContext context, String author) {  //updated
    showModalBottomSheet(
        context: context,
        builder: (ctx) {
          return BottomSheetWidget(author);  //updated
        });
  }

新错误:位置参数太多:预期为 0,但找到 1 个。

class BottomSheetWidget extends StatefulWidget {   

     final String author;                 //updated
     BottomSheetWidget({this.author});    //updated

     @override
  class _BottomSheetWidgetState createState() => _BottomSheetWidgetState();
}

class _BottomSheetWidgetState extends State<BottomSheetWidget> {

    Widget build(BuildContext context) {
          return Container(
                  new ElevatedButton(
                  child: Text('Send'),
                  onPressed: () {
                    requestTour(widget.author);     //updated
                  },
                ),
               .....
              }


    requestTour(String userName) async { 
    ...
    }

2 个答案:

答案 0 :(得分:1)

只需删除新到达错误的花括号: 将 BottomSheetWidget({this.author}); 替换为 BottomSheetWidget(this.author);

答案 1 :(得分:1)

class BottomSheetWidget extends StatefulWidget {   

     final String author;                 //updated
     BottomSheetWidget(this.author);    //<-- remove {}

     @override
  class _BottomSheetWidgetState createState() => _BottomSheetWidgetState();
}

class _BottomSheetWidgetState extends State<BottomSheetWidget> {

    Widget build(BuildContext context) {
          return Container(
                  new ElevatedButton(
                  child: Text('Send'),
                  onPressed: () {
                    requestTour(widget.author);     //updated
                  },
                ),
               .....
              }


    requestTour(String userName) async { 
    ...
    }