Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 是否可以最小化对象定义(对象的折叠代码)(特别是带颤振的省道)(Android Studio)_Flutter_Dart - Fatal编程技术网

Flutter 是否可以最小化对象定义(对象的折叠代码)(特别是带颤振的省道)(Android Studio)

Flutter 是否可以最小化对象定义(对象的折叠代码)(特别是带颤振的省道)(Android Studio),flutter,dart,Flutter,Dart,例如,我有一个很长的代码 @override Widget build(BuildContext context) { print('building'); WidgetsBinding.instance .addPostFrameCallback((_) => changeThemeAfterBuild(context)); return Scaffold( appBar: AppBar( leading: I

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

  @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"));
                          }
                        }),
                  ],
                ),
              ),
            )),
          ),
        ],
      ),
    );
  }
@覆盖
小部件构建(构建上下文){
打印(“建筑物”);
WidgetsBinding.instance
.addPostFrameCallback(()=>changeThemeAfterBuild(上下文));
返回脚手架(
appBar:appBar(
领先:IconButton(
图标:图标(图标、箭头、背面),
已按下:(){
_logEntryDetailBloc.dispose();
Navigator.pop(上下文);
},
),
标题:文本(this.widget.title),
),
正文:专栏(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
填充物(
填充:常数边集全部(2.0),
儿童:新材料(
孩子:填充(
填充:常数边集全部(6.0),
子:容器(
宽度:MediaQuery.of(context).size.width-20,
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
新文本(
“消息:”,
样式:TextStyle(
尺寸:22,
color:color.fromRGBO(127,127,127,1)),
),
新文本(
widget.logEntry.message,
样式:TextStyle(字体大小:20),
),
StreamBuilder(
流:_logEntryDetailBloc.logEntryDetailStream,
生成器:(上下文,快照){
打印(“具有详细数据${snapshot.hasData}”);
打印(快照数据);
if(snapshot.hasData){
var logEntry=(snapshot.data作为logEntry);
if(logEntry.logLevel.name==错误)
返回容器(
子项:ErrorDetailScreenCainer(),
高度:
MediaQuery.of(context).size.height-156,
);
返回容器(
子项:文本(snapshot.data.toString()),
高度:
MediaQuery.of(context.size.height-200);
}否则{
返回新图像(
图像:新资产图像(“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
              )
            ),
           ),
         ),
      ],
    ),
  );
}
@覆盖
小部件构建(构建上下文){
打印(“建筑物”);
WidgetsBinding.instance
.addPostFrameCallback(()=>changeThemeAfterBuild(上下文));
返回脚手架(
appBar:appBar(…),//我在这里折叠
正文:专栏(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
填充物(
填充:常数边集全部(2.0),
儿童:新材料(
孩子:填充(
填充:常数边集全部(6.0),
子:容器(
宽度:MediaQuery.of(context).size.width-20,
child:Column(…)//我也在这里折叠
)
),
),
),
],
),
);
}
这是可能的。
或者我可以执行的任何其他选择,使它看起来更干净。

如今,Flatter AndroidStudio/IntelliJ插件支持这一点。下面是一个屏幕截图,显示了您的构建方法折叠了两个子树。请注意,小部件ui指南还可以更轻松地跟踪Intellij中的大部件树

您是否要求编辑器具有折叠代码的功能?这将在很大程度上取决于您使用的编辑器-您可以将该细节添加到您的问题中吗?intelliJ和vscode都应该支持折叠。编辑文章。折叠只是在类定义、函数定义、注释等方面,而不是在对象声明/定义方面。更新android studio对我来说很有效。我使用的是不支持此功能的旧版本。谢谢你的帮助