未定义名称'context'。试着将名称改成已定义的名称,或定义名称为

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

这是我的代码,但我从来没有改变页面。Error = Undefined name 'context'.

这些是其中的一些。

未定义名称 "context在flutter导航中未定义名称'context'。

Try correcting the name to one that is defined, or defining the name.

class EntryItem extends StatelessWidget {
const EntryItem(this.entry);

enter code here

final Entry entry;

Widget _buildTiles(Entry root) {
if (root.children.isEmpty)
return ListTile(
title: Text(root.title, style: TextStyle(color: Colors.black)),
trailing: Icon(
Icons.keyboard_arrow_right,
color: Colors.white,
),
onTap: () {
### Navigator.of(context).pushNamedAndRemoveUntil('/gettingStarted', (route) => false)
},
selected: true,
);
return ExpansionTile(
key: PageStorageKey(root),
trailing: Icon(
Icons.keyboard_arrow_right,
),
title: Text(
root.title,
style: TextStyle(color: Color(0xFF2F6CE6)),
),
children: root.children.map(_buildTiles).toList(),
);
}

@override
Widget build(BuildContext context) {
return _buildTiles(entry);
}
}
flutter flutter-layout
1个回答
0
投票

你必须通过 context 从您的构建函数到您的 _buildTiles

Widget _buildTiles(Entry root, BuildContext context) 

而。

return _buildTiles(entry, context);

然后使用上下文来导航。


0
投票

你可以在创建ListView.builder时将上下文传递给EntryItem方法,并在OnClick中使用它来导航到OtherPage。 import 'package:fluttermaterial.dart';

void main() => runApp(new ExpansionTileSample());

class ExpansionTileSample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: const Text('ExpansionTile'),
        ),
        body: new ListView.builder(
          itemBuilder: (BuildContext context, int index) =>
          new EntryItem(data[index], context),
          itemCount: data.length,
        ),
      ),
    );
  }
}

// One entry in the multilevel list displayed by this app.
class Entry {
  Entry(this.title, [this.children = const <Entry>[]]);

  final String title;
  final List<Entry> children;
}

// The entire multilevel list displayed by this app.
final List<Entry> data = <Entry>[
  new Entry(
    'Chapter A',
    <Entry>[
      new Entry(
        'Section A0',
        <Entry>[
          new Entry('Item A0.1'),
          new Entry('Item A0.2'),
          new Entry('Item A0.3'),
        ],
      ),
      new Entry('Section A1'),
      new Entry('Section A2'),
    ],
  ),
  new Entry(
    'Chapter B',
    <Entry>[
      new Entry('Section B0'),
      new Entry('Section B1'),
    ],
  ),
  new Entry(
    'Chapter C',
    <Entry>[
      new Entry('Section C0'),
      new Entry('Section C1'),
      new Entry(
        'Section C2',
        <Entry>[
          new Entry('Item C2.0'),
          new Entry('Item C2.1'),
          new Entry('Item C2.2'),
          new Entry('Item C2.3'),
        ],
      ),
    ],
  ),
];

// Displays one Entry. If the entry has children then it's displayed
// with an ExpansionTile.
class EntryItem extends StatelessWidget {
  const EntryItem(this.entry, this.context);

  final Entry entry;
  final BuildContext context;

  Widget _buildTiles(Entry root) {
    if (root.children.isEmpty) return new ListTile(
        onTap: () { print("I can be tapped but I dont't figure out how to navigate");
        Navigator.of(context).push(new MaterialPageRoute(builder: (context) {
          return new OtherScreen();
        }));
        },
        title: new Text(root.title));
    return new ExpansionTile(
      key: new PageStorageKey<Entry>(root),
      title: new Text(root.title),
      children: root.children.map(_buildTiles).toList(),
    );
  }

  @override
  Widget build(BuildContext context) {
    return _buildTiles(entry);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.