首页 > 解决方案 > 在将 Container 包装到 SigleChildScrollView 时,UI 看起来很模糊?

问题描述

我正在构建一个叠加层,并且叠加层内容超过了容器大小,所以我尝试将容器包装在 SingleChildScrollView 中,但是这样做之后,UI 看起来很模糊。容器有一个 Column,我在其中放置 FormFields,对于 Column,mainAxisAlignment 属性设置为 spaceBetween 但小部件也彼此相邻呈现。

将容器添加到 SingleChildScrollView 之前的代码和 UI:

addNewStudent(BuildContext context) {
    OverlayState overlayState = Overlay.of(context);
    OverlayEntry overlayEntry;
    overlayEntry = OverlayEntry(
        builder: (context) => Positioned(
            width: SizeConfig.blockSizeHorizontal * 30,
            height: SizeConfig.blockSizeVertical * 90,
            top: SizeConfig.blockSizeVertical * 9,
            left: SizeConfig.blockSizeHorizontal * 40,
            child: Material(
              child: Container(
                  alignment: Alignment.topLeft,
                  padding: EdgeInsets.symmetric(
                      vertical: SizeConfig.blockSizeVertical * 2,
                      horizontal: SizeConfig.blockSizeHorizontal * 1.5),
                  decoration: BoxDecoration(
                      color: Color(0xFFFFFFFF),
                      border: Border.all(color: Colors.black38, width: 1)),
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: [
                          Text(
                            'ADD NEW STUDENT',
                            style: GoogleFonts.montserrat(
                                textStyle: TextStyle(
                                    color: Colors.blue,
                                    fontSize: 22,
                                    fontWeight: FontWeight.w400)),
                          ),
                          IconButton(
                              icon: Icon(
                                Icons.close,
                              ),
                              onPressed: () {
                                setState(() {
                                  overlayEntry.remove();
                                  overlayIgnoreState = false;
                                  opacity = 1;
                                });
//TODO turning the IgnorePointer false here only works for this screen as it is for this container only it
//should be set for the parent continer of which the drawer and appBar are a part of.
                              })
                        ],
                      ),
                      Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: [
                          Container(
                            decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(10),
                              color: Color(0xFFF3F3F3),
                            ),
                            width: SizeConfig.blockSizeHorizontal * 12,
                            child: TextFormField(
                                decoration: InputDecoration(
                                    enabledBorder: OutlineInputBorder(
                                        borderRadius: BorderRadius.circular(10),
                                        borderSide: const BorderSide(
                                            color: Color(0xFFF3F3F3))),
                                    focusedBorder: OutlineInputBorder(
                                        borderRadius: BorderRadius.circular(10),
                                        borderSide: const BorderSide(
                                            color: Color(0xFFF3F3F3))),
                                    hintText: 'First Name',
                                    hintStyle: GoogleFonts.montserrat(
                                        textStyle:
                                            TextStyle(color: Colors.black54)))),
                          ),
                          Container(
                            decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(10),
                              color: Color(0xFFF3F3F3),
                            ),
                            width: SizeConfig.blockSizeHorizontal * 12,
                            child: TextFormField(
                                decoration: InputDecoration(
                                    enabledBorder: OutlineInputBorder(
                                        borderRadius: BorderRadius.circular(10),
                                        borderSide: const BorderSide(
                                            color: Color(0xFFF3F3F3))),
                                    focusedBorder: OutlineInputBorder(
                                        borderRadius: BorderRadius.circular(10),
                                        borderSide: const BorderSide(
                                            color: Color(0xFFF3F3F3))),
                                    hintText: 'Last Name',
                                    hintStyle: GoogleFonts.montserrat(
                                        textStyle:
                                            TextStyle(color: Colors.black54)))),
                          )
                        ],
                      ),
                      Container(
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(10),
                          color: Color(0xFFF3F3F3),
                        ),
                        child: TextFormField(
                            decoration: InputDecoration(
                                enabledBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                focusedBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                hintText: 'Father\'s Name',
                                hintStyle: GoogleFonts.montserrat(
                                    textStyle:
                                        TextStyle(color: Colors.black54)))),
                      ),
                      Container(
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(10),
                          color: Color(0xFFF3F3F3),
                        ),
                        child: TextFormField(
                            decoration: InputDecoration(
                                enabledBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                focusedBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                hintText: 'Email id',
                                hintStyle: GoogleFonts.montserrat(
                                    textStyle:
                                        TextStyle(color: Colors.black54)))),
                      ),
                      Container(
                        decoration: BoxDecoration(
                          color: Colors.grey[200],
                          borderRadius: BorderRadius.circular(8),
                        ),
                        child: Row(
                          children: [
                            Container(
                              height: 50,
                              alignment: Alignment.center,
                              padding: const EdgeInsets.symmetric(
                                horizontal: 8,
                              ),
                              decoration: BoxDecoration(
                                color: Colors.blue,
                                borderRadius: BorderRadius.only(
                                  topLeft: Radius.circular(8),
                                  bottomLeft: Radius.circular(8),
                                ),
                              ),
                              child: Text(
                                "+91",
                                style: TextStyle(
                                  color: Colors.white,
                                ),
                              ),
                            ),
                            Expanded(
                              child: Padding(
                                padding: const EdgeInsets.symmetric(
                                  horizontal: 12,
                                ),
                                child: TextField(
                                  decoration: InputDecoration(
                                      border: InputBorder.none,
                                      hintText: "Mobile No."),
                                ),
                              ),
                            )
                          ],
                        ),
                      ),
                      Container(
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(10),
                          color: Color(0xFFF3F3F3),
                        ),
                        child: TextFormField(
                            decoration: InputDecoration(
                                enabledBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                focusedBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                hintText: 'Date of Birth',
                                hintStyle: GoogleFonts.montserrat(
                                    textStyle:
                                        TextStyle(color: Colors.black54)))),
                      ),
                      Container(
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(10),
                          color: Color(0xFFF3F3F3),
                        ),
                        child: TextFormField(
                            decoration: InputDecoration(
                                enabledBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                focusedBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                hintText: 'School Name',
                                hintStyle: GoogleFonts.montserrat(
                                    textStyle:
                                        TextStyle(color: Colors.black54)))),
                      ),
                      Container(
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(10),
                          color: Color(0xFFF3F3F3),
                        ),
                        child: TextFormField(
                            keyboardType: TextInputType.multiline,
                            maxLines: 3,
                            decoration: InputDecoration(
                                enabledBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                focusedBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                hintText: 'Address',
                                hintStyle: GoogleFonts.montserrat(
                                    textStyle:
                                        TextStyle(color: Colors.black54)))),
                      ),
                      Container(
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(10),
                          color: Color(0xFFF3F3F3),
                        ),
                        child: TextFormField(
                            decoration: InputDecoration(
                                enabledBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                focusedBorder: OutlineInputBorder(
                                    borderRadius: BorderRadius.circular(10),
                                    borderSide: const BorderSide(
                                        color: Color(0xFFF3F3F3))),
                                hintText: 'Assign Batch',
                                hintStyle: GoogleFonts.montserrat(
                                    textStyle:
                                        TextStyle(color: Colors.black54)))),
                      ),
                      Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: [
                          Text('Gender', style: montserratTextStyle(16, Colors.black54)),
                          Radio(
                            value: 1,
                            groupValue: null,
                            onChanged: null,
                          ),
                          Text('Male', style: montserratTextStyle(15, Colors.black54)),
                          Radio(
                            value: 2,
                            groupValue: null,
                            onChanged: null,
                          ),
                          Text('Female', style: montserratTextStyle(15, Colors.black54)),
                          Radio(
                            value: 3,
                            groupValue: null,
                            onChanged: null,
                          ),
                          Text('Other', style: montserratTextStyle(15, Colors.black54)),
                        ],
                      ),
                      
                      Container(
                        decoration: BoxDecoration(
                          color: Colors.grey[200],
                          borderRadius: BorderRadius.circular(8),
                        ),
                        child: Row(
                          children: [
                            Container(
                              height: 50,
                              alignment: Alignment.center,
                              padding: const EdgeInsets.symmetric(
                                horizontal: 8,
                              ),
                              decoration: BoxDecoration(
                                color: Colors.blue,
                                borderRadius: BorderRadius.only(
                                  topLeft: Radius.circular(8),
                                  bottomLeft: Radius.circular(8),
                                ),
                              ),
                              child: Text(
                                'Fee Payment Type',
                                style: TextStyle(
                                  color: Colors.white,
                                ),
                              ),
                            ),
                            Expanded(
                              child: Padding(
                                padding: const EdgeInsets.symmetric(
                                  horizontal: 12,
                                ),
                                child: TextField(  
                                  decoration: InputDecoration(
                                      border: InputBorder.none,
                                      hintText: 'Monthly'),
                                ),
                              ),
                            )
                          ],
                        ),
                      ),

                      RaisedButton(
                        padding: EdgeInsets.symmetric(
                            vertical: SizeConfig.blockSizeVertical * 1,
                            horizontal: SizeConfig.blockSizeHorizontal * 3),
                        shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(10)),
                        elevation: 0,
                        color: Colors.blue,
                        onPressed: () {
                          //function to add new Student to database
                        },
                        child: Text('SAVE',
                            style: GoogleFonts.montserrat(
                                textStyle: TextStyle(
                              color: Colors.white,
                              fontSize: 16,
                            ))),
                      )
                    ],
                  )),
            )));
    overlayState.insert(overlayEntry);
  }

添加 SingleChildScrollView 之前的 UI: 之前的 UI

添加 SingleChildScrollView 后的 UI: 后的 UI

标签: flutterdart

解决方案


推荐阅读