Flutter 颤振:斜面';使用widget.variable访问widget变量

Flutter 颤振:斜面';使用widget.variable访问widget变量,flutter,Flutter,我无法使用widget.message在\u MenuStatefulWidgetState中,错误表示没有为类“MenuStatefulWidget”定义getter“message” 我想是因为我使用的是FutureBuilder,并试图访问builder中的widget.message:(BuildContext,AsyncSnapshot快照)如何解决这个问题 class MenuStatefulWidget extends StatefulWidget { MenuStateful

我无法使用
widget.message
在\u MenuStatefulWidgetState中,错误表示没有为类“MenuStatefulWidget”定义getter“message”

我想是因为我使用的是FutureBuilder,并试图访问
builder中的widget.message:(BuildContext,AsyncSnapshot快照)
如何解决这个问题

class MenuStatefulWidget extends StatefulWidget {
  MenuStatefulWidget({Key key, String message}) : super(key: key);

  @override
  _MenuStatefulWidgetState createState() => _MenuStatefulWidgetState();
}

class _MenuStatefulWidgetState extends State<MenuStatefulWidget> {
  Widget build(BuildContext context) {

    String storeID =
        Provider.of<AppData>(context, listen: true).selectedStoreId;
    String storeMenuFilename = 'store_$storeID.json';

    Future _menuDataFuture = getFile(storeMenuFilename);

    return FutureBuilder<dynamic>(
      future: _menuDataFuture,
      builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
        List<Widget> children;

        if (snapshot.hasData) {
          children = [];

          var storeData = snapshot.data;

          Provider.of<AppData>(context, listen: false).setStoreData(storeData);

          var menu = storeData['menu'];
          var itemOption = storeData['option'];

          for (var category in menu) {
            (category as Map<String, dynamic>).forEach((key, value) {
              children.add(CategoryWidget(name: key));
              for (var course in value) {
                children.add(LineWidget(course, itemOption));
              }
            });
          }
        } else if (snapshot.hasError) {
          children = <Widget>[
            Icon(
              Icons.error_outline,
              color: Colors.red,
              size: 60,
            ),
          ];
        } else {
              if (widget.message != null){
                  children.add(
                    Container(
                      margin: topBottomMargin,
                      child: Text(widget.message,
                      ),
                    ),
                  );
              }

          children.add(
            Container(
              padding: EdgeInsets.fromLTRB(0, 20, 0, 0),
              child: Center(
                child: Row(
                  mainAxisSize: MainAxisSize.min,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    CircularProgressIndicator(),
                  ],
                ),
              ),
            ));
        }


        return Center(
          child: ListView(
            children: children,
          ),
        );
      },
    );
  }
}
class MenuStatefulWidget扩展了StatefulWidget{
MenuStatefulWidget({Key,String message}):super(Key:Key);
@凌驾
_MenuStatefulWidgetState createState()=>\u MenuStatefulWidgetState();
}
类_MenuStatefulWidgetState扩展状态{
小部件构建(构建上下文){
字符串存储ID=
Provider.of(context,listen:true);
字符串storeMenuFilename='store_$storeID.json';
Future _menuDataFuture=getFile(storeMenuFilename);
回归未来建设者(
未来:_menuDataFuture,
生成器:(BuildContext上下文,异步快照){
列出儿童名单;
if(snapshot.hasData){
儿童=[];
var storeData=snapshot.data;
Provider.of(context,listen:false).setStoreData(storeData);
var menu=storeData['menu'];
var itempoption=storeData['option'];
用于(菜单中的变量类别){
(分类为Map.forEach((键,值){
add(CategoryWidget(名称:key));
for(var课程价值){
添加(LineWidget(课程,项目选项));
}
});
}
}else if(snapshot.hasrerror){
儿童=[
图标(
Icons.error\u轮廓,
颜色:颜色,红色,
尺码:60,
),
];
}否则{
如果(widget.message!=null){
children.add(
容器(
保证金:上下保证金,
子项:文本(widget.message,
),
),
);
}
children.add(
容器(
填充:来自LTRB(0,20,0,0)的边插入集,
儿童:中心(
孩子:排(
mainAxisSize:mainAxisSize.min,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
CircularProgressIndicator(),
],
),
),
));
}
返回中心(
子:ListView(
儿童:儿童,,
),
);
},
);
}
}

您需要在小部件中创建一个名为message的变量,然后按如下方式提供对它的引用:

class MenuStatefulWidget extends StatefulWidget {
  String message;

  MenuStatefulWidget({Key key, this.message}) : super(key: key);

  @override
  _MenuStatefulWidgetState createState() => _MenuStatefulWidgetState();
}
使用上述代码,我们在MenuStatefulWidget中声明了名为“message”的变量,并将该变量的值作为参数传递给MenuStatefulWidget。现在,您可以使用

widget.message

您需要在小部件中创建一个名为message的变量,然后提供对它的引用,如下所示:

class MenuStatefulWidget extends StatefulWidget {
  String message;

  MenuStatefulWidget({Key key, this.message}) : super(key: key);

  @override
  _MenuStatefulWidgetState createState() => _MenuStatefulWidgetState();
}
使用上述代码,我们在MenuStatefulWidget中声明了名为“message”的变量,并将该变量的值作为参数传递给MenuStatefulWidget。现在,您可以使用

widget.message