1

嘿,我是学习 Flutter 和 Dart 的新手。请帮我。:) 我真的不知道该怎么做我完全是初学者。:/

现在我已经粘贴了我的完整代码,希望你能看到我在哪里定义了我的容器。这都是一个 TabView,因为我想用一些例子来训练一个游戏,所以我尝试了 TabView。在 TabView 中,我将所有内容打包在 Containers 中。如果有更好的选择,当然也可以告诉我。:)

这是我的代码:

Future<void> _showAlert(BuildContext context) async {
  showDialog(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context) {
      return AlertDialog(
          title: Text('Accept?'),
          content: Text("Do you accept?"),
          actions: <Widget>[
            FlatButton(onPressed: (){
              Navigator.of(context).pop();
            },
            child: Text('No')
            ),
            FlatButton(onPressed: (){
              Navigator.of(context).pop();
            },
            child: Text('Yes')
            ),
          ],
          backgroundColor: Colors.deepOrange,
          shape: CircleBorder(),
        );
    }
        );

}

class MyApp extends StatelessWidget {
  List<Widget> containers = [
    Container(
      color: Colors.orange,
      padding: EdgeInsets.all(20.0),
      alignment: Alignment.center,
      child: Container(
        height: 80,
        width: 80,
        child: FloatingActionButton(
          child: Icon(Icons.check),
          tooltip: ('"Hello World"'),
          onPressed: () {
            print('Hello World');
          },
          backgroundColor: Colors.blue,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(
              Radius.circular(16.0),
            ),
          ),
        ),
      ),
    ),
    Container(
      color: Colors.teal,
      alignment: Alignment.center,
      child: RaisedButton(
        onPressed: () {
          print("Raised Button clicked!");
        },
        child: Text(
          "Please click on me!",
          style: TextStyle(fontSize: 18),
        ),
      ),
    ),





    Container(
      color: Colors.deepPurple,
      alignment: Alignment.center,
      child: RaisedButton(onPressed: () {_showAlert(context);},
      color: Colors.deepOrange,
      child: Icon(Icons.warning)
      ),
    ),
  ];

错误说:未定义的名称“上下文”。(在我的按钮的 onPressed 部分。)

显示错误

代码片段 1

代码片段 2

4

1 回答 1

1

您在无状态小部件中缺少的是build method(其中包含上下文),但存在的问题是您无法使用 build 方法返回List,因为它只返回Widget。为了解决这个问题,您应该首先为您的小部件列表创建一个函数,然后在无状态小部件内部返回具有属性的小部件内部的函数,例如Column

您的 Widget 列表功能

widgetList(BuildContext context) {
  return [ 
    Container(
      color: Colors.orange,
      padding: EdgeInsets.all(20.0),
      alignment: Alignment.center,
      child: Container(
        height: 80,
        width: 80,
        child: FloatingActionButton(
          child: Icon(Icons.check),
          tooltip: ('"Hello World"'),
          onPressed: () {
            print('Hello World');
          },
          backgroundColor: Colors.blue,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(
              Radius.circular(16.0),
            ),
          ),
        ),
      ),
    ),

    Container(
      color: Colors.teal,
      alignment: Alignment.center,
      child: RaisedButton(
        onPressed: () {
          print("Raised Button clicked!");
        },
        child: Text(
          "Please click on me!",
          style: TextStyle(fontSize: 18),
        ),
      ),
    ),
    Container(
      color: Colors.deepPurple,
      alignment: Alignment.center,
      child: RaisedButton(
          onPressed: () {
            _showAlert(context);
          },
          color: Colors.deepOrange,
          child: Icon(Icons.warning)),
    ),
  ];
}

您的无状态小部件

class MyApp extends StatelessWidget {

  @override Widget build(BuildContext context) {
    return  Column(
      children: 
        widgetList(context)


    );
    }
}
于 2020-05-24T22:01:37.423 回答