flutter - 小部件的多个对象只能在Flutter中运行一次initState?

标签 flutter dart

class CustomImageRectangle extends StatefulWidget {
  final String url;

  const CustomImageRectangle({Key key, this.url}): super(key: key);

  @override
  _CustomImageRectangleState createState() => _CustomImageRectangleState();
}

class _CustomImageRectangleState extends State<CustomImageRectangle> {

  @override
  void initState() {
    super.initState();
    print(widget.url != null?'not null':'null');
  }
在类里面,我在自己的家庭小部件中调用了3次,但仅运行一次initState。这是为什么?
控制台中只能打印1张。
logo != ''
    ? FutureBuilder<String>(
         future: storage.getVendorLogo(logo),
              builder: (context, snapshot) {
                 if (snapshot.hasData) {
                     return CustomImageRectangle(url: snapshot.data);
                  } else {
                     return CustomImageRectangle();
                  }
             })
    : CustomImageRectangle(),

最佳答案

一次未创建CustomImageRectangle 3次。有条件地渲染一次。因此,仅观察到一次打印。
在代码片段中:

logo != ''
    ? FutureBuilder<String>(
         future: storage.getVendorLogo(logo),
              builder: (context, snapshot) {
                 if (snapshot.hasData) {
                     return CustomImageRectangle(url: snapshot.data);
                  } else {
                     return CustomImageRectangle();
                  }
             })
    : CustomImageRectangle(),
仅当FutureBuilderlogo!=''时,才会返回true
builderFutureBuilder中,if (snapshot.hasData)将为truefalse
取决于,将仅返回CustomImageRectangle(url: snapshot.data)CustomImageRectangle()之一。
否则,如果logo!=''false,则将返回三元运算符中的CustomImageRectangle()
在所有情况下,CustomImageRectangle仅创建一次。因此,仅一次调用了initState
考虑下面的示例,该示例一次渲染3次:
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: Column(
          children: [
            CustomImageRectangle(),
            CustomImageRectangle(),
            CustomImageRectangle(),
          ],
          ),
        ),
      ),
    );
  }
}
控制台输出:
null
null
null

关于flutter - 小部件的多个对象只能在Flutter中运行一次initState?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63032813/

相关文章:

flutter - 如何在 Flutter 中混合健全的 Null 安全性和不健全的 Null 安全性

带有返回数据的 Flutter Back 按钮

google-maps - 如何在 flutter 中更改谷歌地图 API 我的位置按钮位置?

flutter - 如何在没有等待的情况下获得 future 值(value)?

dart - Dart中的运行时类型检查-检查列表

flutter - 如何改变按钮主题的背景颜色,文本颜色和高度?

dart - 如何使用 Flutter 实现 UserAccountsDrawerHeader 小部件的 AccountDetail 以与 Gmail 应用程序一样显示?

firebase - 为什么我的快照显示它包含数据?

flutter - Dart 中泛型类的一个参数具有多种类型

angular - dart angular 2 - 组件中的双向绑定(bind)