按照建议使用pip install six
和 sudo easy_install six
没用,使用python2.x -m pip install six
或者 brew reinstall python@2
和
pip install six
解决。
Missing xcode dependency: Python module “six”
在写页面跳转的时候报出了该错误:
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Test',
home: new Scaffold(
appBar: new AppBar(
title: new Text("Flutter Test"),
),
body: new Column(
children: [
new RaisedButton(
onPressed: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => new BasicWidget()));
},
child: new Text('基本组件'),
)
],
),
),
);
}
}
修改为以下即可,把Scafford独立出widget出来。
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Test',
home: new HomeWidget(),
);
}
}
class HomeWidget extends StatelessWidget{
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Flutter Text"),
),
body: new Column(
children: [
new RaisedButton(
onPressed: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => new BasicWidget()),
);
},
child: new Text('基本组件'),
)
],
),
);
}
}
调用Scaffold.of(context).showSnackBar(snackBar);
的时候报错:
I/flutter (24518): The following assertion was thrown while handling a gesture:
I/flutter (24518): Scaffold.of() called with a context that does not contain a Scaffold.
I/flutter (24518): No Scaffold ancestor could be found starting from the context that was passed to Scaffold.of(). This
I/flutter (24518): usually happens when the context provided is from the same StatefulWidget as that whose build
I/flutter (24518): function actually creates the Scaffold widget being sought.
I/flutter (24518): There are several ways to avoid this problem. The simplest is to use a Builder to get a context that
I/flutter (24518): is “under” the Scaffold. For an example of this, please see the documentation for Scaffold.of():
I/flutter (24518): https://docs.flutter.io/flutter/material/Scaffold/of.html
I/flutter (24518): A more efficient solution is to split your build function into several widgets. This introduces a
I/flutter (24518): new context from which you can obtain the Scaffold. In this solution, you would have an outer widget
I/flutter (24518): that creates the Scaffold populated by instances of your new inner widgets, and then in these inner
I/flutter (24518): widgets you would use Scaffold.of().
I/flutter (24518): A less elegant but more expedient solution is assign a GlobalKey to the Scaffold, then use the
I/flutter (24518): key.currentState property to obtain the ScaffoldState rather than using the Scaffold.of() function.
I/flutter (24518): The context used was:
I/flutter (24518): BasicWidget
class BasicWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Basic Widget"),
),
body: new Column(
children: [
new RaisedButton(
onPressed: () {
final snackBar = new SnackBar(
content: new Text("这是一个Snackbar"),
action: new SnackBarAction(
label: "Undo",
onPressed: (){
}),
);
Scaffold.of(context).showSnackBar(snackBar);
},
child: new Text("显示Snackbar"),
)
],
));
}
}
改成:
class BasicWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Basic Widget"),
),
body: new Builder(builder: (BuildContext context){
return new Column(
children: [
new RaisedButton(
onPressed: () {
final snackBar = new SnackBar(
content: new Text("这是一个Snackbar"),
action: new SnackBarAction(
label: "Undo",
onPressed: (){
}),
);
Scaffold.of(context).showSnackBar(snackBar);
},
child: new Text("显示Snackbar"),
)
],
);
}),
);
}
}
或者我们也可以把Column抽出来:
class BasicWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Basic Widget"),
),
body: new BasicColumnWidget());
}
}
class BasicColumnWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return new Column(
children: [
new RaisedButton(
onPressed: () {
final snackBar = new SnackBar(
content: new Text("这是一个Snackbar"),
action: new SnackBarAction(label: "Undo", onPressed: () {}),
);
Scaffold.of(context).showSnackBar(snackBar);
},
child: new Text("显示Snackbar"),
)
],
);
}
}
of method
终端使用命令flutter packages pub build_runner watch
待续