是否也可以最小化对象的定义(对象的折叠代码)(特别是Dart抖动)(Android Studio)

时间:2019-08-12 13:24:06

标签: flutter dart

例如,我有一个很长的代码。

  @override
  Widget build(BuildContext context) {
    print('building');
    WidgetsBinding.instance
        .addPostFrameCallback((_) => changeThemeAfterBuild(context));

    return Scaffold(
      appBar: AppBar(
        leading: IconButton(
          icon: Icon(Icons.arrow_back_ios),
          onPressed: () {
            _logEntryDetailBloc.dispose();
            Navigator.pop(context);
          },
        ),
        title: Text(this.widget.title),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(2.0),
            child: new Material(
                child: Padding(
              padding: const EdgeInsets.all(6.0),
              child: Container(
                width: MediaQuery.of(context).size.width - 20,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    new Text(
                      'Message:',
                      style: TextStyle(
                          fontSize: 22,
                          color: Color.fromRGBO(127, 127, 127, 1)),
                    ),
                    new Text(
                      widget.logEntry.message,
                      style: TextStyle(fontSize: 20),
                    ),
                    StreamBuilder(
                        stream: _logEntryDetailBloc.logEntryDetailStream,
                        builder: (context, snapshot) {
                          print("has detail data ${snapshot.hasData}");
                          print(snapshot.data);
                          if (snapshot.hasData) {
                            var logEntry = (snapshot.data as LogEntry);
                            if (logEntry.logLevel.name == ERROR)
                              return Container(
                                child: ErrorDetailScreenContainer(),
                                height:
                                    MediaQuery.of(context).size.height - 156,
                              );

                            return Container(
                                child: Text(snapshot.data.toString()),
                                height:
                                    MediaQuery.of(context).size.height - 200);
                          } else {
                            return new Image(
                                image: new AssetImage("images/loader.gif"));
                          }
                        }),
                  ],
                ),
              ),
            )),
          ),
        ],
      ),
    );
  }

现在的问题是,由于我正在抖动,因此对象被嵌套,每个对象都是其他对象的子对象。 因此,当父对象通过嵌套变大时。变得有点难以理解,括号匹配也变得困难

解决方案我正在寻找的东西是这样的:

  @override
  Widget build(BuildContext context) {
    print('building');
    WidgetsBinding.instance
        .addPostFrameCallback((_) => changeThemeAfterBuild(context));

    return Scaffold(
      appBar: AppBar(...), // I folded here
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(2.0),
            child: new Material(
                child: Padding(
              padding: const EdgeInsets.all(6.0),
              child: Container(
                width: MediaQuery.of(context).size.width - 20,
                child: Column(...)  // I foldere here too
              )
            ),
           ),
         ),
      ],
    ),
  );
}

像这样可能。 或我可以执行的其他任何选择,以使其看起来更干净。

1 个答案:

答案 0 :(得分:3)

Flutter AndroidStudio / IntelliJ插件今天支持此功能。这是一个截图,显示了您的构建方法折叠了两个子树。请注意,小部件ui指南还使跟踪Intellij中的大小部件树变得更加容易。 Screenshot showing collapsing a block