flutter A RenderFlex 在底部溢出了 271 个像素

时间:2021-07-06 15:16:29

标签: flutter

您好,我正在使用 SingleChildScrollView,但收到此错误“RenderFlex 底部溢出 271 像素”。我认为这是因为您正在使用 appBar 的 PreferredSize 和 tabBarview。抱歉代码太长。

  • 使用 abbar tabbarView 的小部件。
@override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(kToolbarHeight),
        child: Container(
          color: Colors.black,
          child: SafeArea(
              child: Column(
            children: [
              TabBar(
                indicatorColor: Colors.grey,
                controller: this._tabController,
                tabs: [
                  Tab(
                    text: 'MOVIE',
                  ),
                  Tab(
                    text: 'TV',
                  ),
                ],
              ),
            ],
          )),
        ),
      ),
      // bottom:

      body: TabBarView(
        controller: this._tabController,
        children: [
          Column(
            children: [
              search(),
              this.movieName.isNotEmpty ? searchMovieTile() : Container(),
            ],
          ),
          Column(
            children: [
              search(),
              this.movieName.isNotEmpty ? searchTvTile() : Container(),
            ],
          )
        ],
      ),
    );
  }
  • 使用 SingleChildScrollView 的小部件。
Widget searchMovieTile() {
    return FutureBuilder(
      future: this._searchController.searchMovie(movieName: this.movieName),
      builder:
          (BuildContext context, AsyncSnapshot<List<SearchModel>> snapshot) {
        if (snapshot.hasData) {
          return Consumer<SearchProvider>(
            builder: (context, value, child) {
              return snapshot.data!.isEmpty
                  ? Container()
                  : SingleChildScrollView(
                      child: Container(
                        height: MediaQuery.of(context).size.height,
                        child: GridView.count(
                          childAspectRatio: 2 / 3,
                          mainAxisSpacing: 10.0,
                          crossAxisSpacing: 10.0,
                          crossAxisCount: 3,
                          children: List.generate(
                            snapshot.data!.length,
                            (index) => ClipRRect(
                              borderRadius: BorderRadius.circular(15.0),
                              child: snapshot.data![index].posterPath.isEmpty
                                  ? Container(
                                      child: Center(
                                        child: Text(
                                          'Image preparation',
                                          style: TextStyle(color: Colors.white),
                                        ),
                                      ),
                                    )
                                  : GestureDetector(
                                      onTap: () {
                                        Navigator.of(context).push(
                                            MaterialPageRoute(builder:
                                                (BuildContext context) {
                                          return MultiProvider(
                                            providers: [
                                              ChangeNotifierProvider(
                                                  create: (BuildContext
                                                          context) =>
                                                      MovieDetailProvider()),
                                              ChangeNotifierProvider(
                                                  create:
                                                      (BuildContext context) =>
                                                          MovieVideoProvider()),
                                            ],
                                            child: SearchMovieDetailScreen(
                                                movieData:
                                                    snapshot.data![index]),
                                          );
                                        }));
                                      },
                                      child: CachedNetworkImage(
                                        fit: BoxFit.cover,
                                        imageUrl:
                                            'https://image.tmdb.org/t/p/original/${snapshot.data![index].posterPath}',
                                      ),
                                    ),
                            ),
                          ),
                        ),
                      ),
                    );
            },
          );
        } else {
          return Container();
        }
      },
    );
  }
  • 使用文本字段键盘的小部件。
Widget search() {
    return Container(
      padding: EdgeInsets.only(
        left: 5.0,
        top: 10.0,
        right: 5.0,
        bottom: 10.0,
      ),
      child: Row(
        children: [
          Expanded(
            flex: 6,
            child: TextField(
              onSubmitted: (String name) {
                this.movieName = this._textEditingController.text;
                print(this.movieName);
              },
              cursorColor: Colors.grey,
              focusNode: this._focusNode,
              style: TextStyle(
                color: Colors.white,
                fontSize: 15.0,
              ),
              controller: this._textEditingController,
              decoration: InputDecoration(
                filled: true,
                fillColor: Colors.grey[900],
                prefixIcon: Icon(
                  Icons.search,
                  color: Colors.grey,
                  size: 20.0,
                ),
                suffixIcon: this._focusNode.hasFocus
                    ? IconButton(
                        onPressed: () {
                          setState(() {
                            this._textEditingController.clear();
                          });
                        },
                        icon: Icon(
                          Icons.cancel,
                          size: 20.0,
                          color: Colors.grey,
                        ),
                      )
                    : Container(),
                hintText: 'Search',
                hintStyle: TextStyle(color: Colors.grey),
                labelStyle: TextStyle(color: Colors.white),
                focusedBorder: OutlineInputBorder(
                  borderSide: BorderSide(
                    color: Colors.transparent,
                  ),
                  borderRadius: BorderRadius.circular(10.0),
                ),
                enabledBorder: OutlineInputBorder(
                  borderSide: BorderSide(
                    color: Colors.transparent,
                  ),
                  borderRadius: BorderRadius.circular(10.0),
                ),
                border: OutlineInputBorder(
                  borderSide: BorderSide(
                    color: Colors.transparent,
                  ),
                  borderRadius: BorderRadius.circular(10.0),
                ),
              ),
            ),
          ),
          this._focusNode.hasFocus
              ? Expanded(
                  child: TextButton(
                  child: Text(
                    'cancel',
                    style: TextStyle(
                      fontSize: 13.0,
                      color: Colors.grey,
                    ),
                  ),
                  onPressed: () {
                    setState(() {
                      this._textEditingController.clear();
                      this._focusNode.unfocus();
                    });
                  },
                ))
              : Expanded(flex: 0, child: Container())
        ],
      ),
    );
  }

对不起,问题水平太低,但如果您能回答,我将不胜感激:)

2 个答案:

答案 0 :(得分:1)

我认为这个问题是由于容器的给定高度(SingleChildScrollView 的子级:

SingleChildScrollView(
                      child: Container(
                        **height: MediaQuery.of(context).size.height,**
                        child: GridView.count(

删除它并告诉我结果。

答案 1 :(得分:0)

尝试:height: MediaQuery.of(context).size.height - 280,