这是代码…
import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Flutter Demo', theme: new ThemeData( primarySwatch: Colors.blue, ), home: new MyHomePage(title: 'Flutter Demo Home Page'), ); } } int number; EdgeInsets globalMargin = const EdgeInsets.symmetric(horizontal: 20.0, vertical: 20.0); TextStyle textStyle = const TextStyle( fontSize: 100.0, color: Colors.black, ); class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => new _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override void initState() { super.initState(); number = number ?? 0; } @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text(widget.title), ), body: new Column( children: <Widget>[ new Text( number.toString(), style: textStyle, ), new GridView.count( crossAxisCount: 2, shrinkWrap: true, scrollDirection: Axis.vertical, children: <Widget>[ new InkResponse( child: new Container( margin: globalMargin, color: Colors.green, child: new Center( child: new Text( "+", style: textStyle, ), )), onTap: () { setState(() { number = number + 1; }); }, ), new Sub(), ], ), ], ), floatingActionButton: new FloatingActionButton( onPressed: () { setState(() {}); }, child: new Icon(Icons.update), ), ); } } class Sub extends StatefulWidget { @override _SubState createState() => new _SubState(); } class _SubState extends State<Sub> { @override Widget build(BuildContext context) { return new InkResponse( child: new Container( margin: globalMargin, color: Colors.red, child: new Center( child: new Text( "-", style: textStyle, ), )), onTap: () { setState(() { number = number - 1; }); }, ); } }
OLD :创建_MyHomePageState的全局实例。在_SubState中将此实例用作_myHomePageState.setState
新 :无需创建全局实例。而是将父实例传递给子窗口小部件
按颤振0.8.2更新的代码 :
import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Flutter Demo', theme: new ThemeData( primarySwatch: Colors.blue, ), home: new MyHomePage(), ); } } EdgeInsets globalMargin = const EdgeInsets.symmetric(horizontal: 20.0, vertical: 20.0); TextStyle textStyle = const TextStyle( fontSize: 100.0, color: Colors.black, ); class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int number = 0; @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text('SO Help'), ), body: new Column( children: <Widget>[ new Text( number.toString(), style: textStyle, ), new GridView.count( crossAxisCount: 2, shrinkWrap: true, scrollDirection: Axis.vertical, children: <Widget>[ new InkResponse( child: new Container( margin: globalMargin, color: Colors.green, child: new Center( child: new Text( "+", style: textStyle, ), )), onTap: () { setState(() { number = number + 1; }); }, ), new Sub(this), ], ), ], ), floatingActionButton: new FloatingActionButton( onPressed: () { setState(() {}); }, child: new Icon(Icons.update), ), ); } } class Sub extends StatelessWidget { _MyHomePageState parent; Sub(this.parent); @override Widget build(BuildContext context) { return new InkResponse( child: new Container( margin: globalMargin, color: Colors.red, child: new Center( child: new Text( "-", style: textStyle, ), )), onTap: () { this.parent.setState(() { this.parent.number --; }); }, ); } }
请让我知道它是否有效。