将变量传递给Stateful类之外的Widget

时间:2019-06-07 23:46:47

标签: flutter dart

将变量(photoUrl)传递到小部件的最佳方法是什么? 在状态类中添加小部件时说:在初始化程序中只能访问静态成员。

将方法更改为静态方法不能解决我的问题。

class _ABState extends State<AB> {
  int _selectedPage = 0;
  String photoUrl; /* Value set in initState()*/

  /* To switch between pages */
  final _pageOptions = [
    Text('Page 1'),
    accountPage(), /* Page 2 */
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _pageOptions[_selectedPage],
    );
  }
}

/* Widget outside class requires photoUrl */
Widget accountPage() {
  return Container(
    decoration: BoxDecoration(
      image: DecorationImage(
        image: NetworkImage(photoUrl),
      ),
    ),
  );
}

1 个答案:

答案 0 :(得分:1)

您正在初始化程序上调用accountPage(),但是photoUrl仅在initState()上设置,因此即使accountPage()可以访问photoUrl,它也会得到错误的值。

我建议以下内容:

class _ABState extends State<AB> {
  int _selectedPage = 0;
  String photoUrl;
  List<Widget>_pageOptions;

  @override
  void initState() {
    super.initState();
    photoUrl = "<PLACE_YOUR_VALUE>";
    _pageOptions = [
      Text('Page 1'),
      accountPage(photoUrl),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _pageOptions[_selectedPage],
    );
  }
}

Widget accountPage(String photoUrl) {
  return Container(
    decoration: BoxDecoration(
      image: DecorationImage(
        image: NetworkImage(photoUrl),
      ),
    ),
  );
}