我设法通过构造函数将Stateful类变量的值传递给State类,如下所示:
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Demo', home: MyHomePage('John', 'Morison'), ); } } class MyHomePage extends StatefulWidget { MyHomePage(this.fname, this.lname); final String fname; final String lname; @override _MyHomePageState createState() => _MyHomePageState(fname, lname); } class _MyHomePageState extends State<MyHomePage> { _MyHomePageState(this.fname, this.lname); final String fname; final String lname; @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Text('Hello $fname $lname'), ) ); } }
太奇怪了,因为有两个以上的变量,所以我不得不做很多工作。有没有更好的办法?
是的,有widget:
widget
从文档:
> /// The current configuration. > /// > /// A [State] object's configuration is the corresponding > [StatefulWidget] > /// instance. This property is initialized by the framework before > calling > /// [initState]. If the parent updates this location in the tree to a > new > /// widget with the same [runtimeType] and [Widget.key] as the current > /// configuration, the framework will update this property to refer to > the new > /// widget and then call [didUpdateWidget], passing the old > configuration as > /// an argument. > T get widget => _widget; > T _widget;
代码如下所示:
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Demo', home: MyHomePage('John', 'Morison'), ); } } class MyHomePage extends StatefulWidget { MyHomePage(this.fname, this.lname); final String fname; final String lname; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Text('Hello ${widget.fname} ${widget.lname}'), ) ); } }