2017-07-14 91 views
0

我需要帮助,我试图按下按钮时显示一个新页面。我得到以下错误:Dart Navigator给出NoSuchMethodError

I/flutter (31562): The following NoSuchMethodError was thrown while handling a gesture: 
I/flutter (31562): Class 'MyHomePage' has no instance getter 'context'. 
I/flutter (31562): Receiver: Instance of 'MyHomePage' 
I/flutter (31562): Tried calling: context 
I/flutter (31562): When the exception was thrown, this was the stack: 

这里是我的代码:

import 'dart:convert'; 
import 'package:flutter/material.dart'; 
import 'package:flutter/services.dart'; 

class MyHomePage extends StatelessWidget{ 

    Container pictureSection(){ 
    return new Container(
     child: new Image.asset(
     'images/sw.jpeg', 
     width: 600.0, 
     height: 240.0, 
     fit: BoxFit.cover, 
    ), 
    ); 
    } 

    Container mainMenuSection(){ 
    var spacer = new SizedBox(height: 12.0); 
    return new Container(
     child: new Column(
     children: <Widget>[ 
      spacer, 
      new RaisedButton(
      onPressed:() {Navigator.of(context).pushNamed('/PlanetsPage');}, 
      child: new Text('Get Planet'), 
      ), 
      spacer, 
      ], 
     ), 
    ); 
    } 

    @override 
    Widget build(BuildContext context){ 
    var spacer = new SizedBox(height: 32.0); 
    var spacer2 = new SizedBox(height: 15.0); 
    return new Scaffold(
     body: new Center(
     child: new Column(
      children: <Widget>[ 
      pictureSection(), 
      mainMenuSection(), 
      ], 
     ), 
    ), 
    ); 
    } 
} 

class PlanetsPage extends StatelessWidget{ 
    Widget build(BuildContext context){ 
    return new Scaffold(
     body: new Center(
     child: new Column(
      child: new Text('Hello World'), 
     ), 
    ), 
    ); 
    } 
} 

void main(){ 
    runApp(new MaterialApp(
    home: new MyHomePage(), 
    routes: <String, WidgetBuilder> { 
     '/PlanetsPage': (BuildContext context) => new PlanetsPage(), 
    }, 
)); 
} 

我想,当按下按钮从主页去行星页面,并且错误只能说明当我按下按钮时。我正在使用我的Hauwei Nova进行测试。

回答

1

尝试从build方法中通过BuildContext而不是使用MyHomePagecontext成员。见下:

import 'dart:convert'; 
import 'package:flutter/material.dart'; 
import 'package:flutter/services.dart'; 

class MyHomePage extends StatelessWidget{ 

    Container pictureSection(){ 
    return new Container(
     child: new Image.asset(
     'images/sw.jpeg', 
     width: 600.0, 
     height: 240.0, 
     fit: BoxFit.cover, 
    ), 
    ); 
    } 

    Container mainMenuSection(BuildContext context){ 
    var spacer = new SizedBox(height: 12.0); 
    return new Container(
     child: new Column(
     children: <Widget>[ 
      spacer, 
      new RaisedButton(
      onPressed:() {Navigator.of(context).pushNamed('/PlanetsPage');}, 
      child: new Text('Get Planet'), 
      ), 
      spacer, 
      ], 
     ), 
    ); 
    } 

    @override 
    Widget build(BuildContext context){ 
    var spacer = new SizedBox(height: 32.0); 
    var spacer2 = new SizedBox(height: 15.0); 
    return new Scaffold(
     body: new Center(
     child: new Column(
      children: <Widget>[ 
      pictureSection(), 
      mainMenuSection(context), 
      ], 
     ), 
    ), 
    ); 
    } 
} 

class PlanetsPage extends StatelessWidget{ 
    Widget build(BuildContext context){ 
    return new Scaffold(
     body: new Center(
     child: new Column(
      child: new Text('Hello World'), 
     ), 
    ), 
    ); 
    } 
} 

void main(){ 
    runApp(new MaterialApp(
    home: new MyHomePage(), 
    routes: <String, WidgetBuilder> { 
     '/PlanetsPage': (BuildContext context) => new PlanetsPage(), 
    }, 
)); 
} 
相关问题