Рендерфлекс переполнен на 1,9 пикселя внизу

#flutter #dart

Вопрос:

Я получаю A RenderFlex overflowed by 1.9 pixels on the bottom ошибку в своем приложении flutter.

Я завернул все СТРОКИ в Развернутый и завернул основной столбец в один файл, но проблема все еще остается. Как вы можете видеть на скриншотах, вид внизу прокручивается вверх. Элемент вверху хлюпает вниз, когда он исчезает с экрана. Я даже не уверен, какая строка вызывает проблему?

Обновить:

Вижу это сейчас.

 The following assertion was thrown while applying parent data.:
Incorrect use of ParentDataWidget.

The ParentDataWidget Expanded(flex: 2) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type ParentData.

Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets.
The offending Expanded is currently placed inside a Semantics widget.

The ownership chain for the RenderObject that received the incompatible parent data was:
  Column ← Expanded ← Semantics ← Align ← ConstrainedBox ← Container ← LayoutBuilder ← DefaultTextStyle ← Align ← Transform ← ⋯
 

.введите описание изображения здесь введите описание изображения здесь

введите описание изображения здесь код:

 import 'package:animation_wrappers/animation_wrappers.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:qvid/BottomNavigation/Explore/explore_page.dart';
import 'package:qvid/Components/profile_page_button.dart';
import 'package:qvid/Components/row_item.dart';
import 'package:qvid/Components/sliver_app_delegate.dart';
import 'package:qvid/Components/tab_grid.dart';
import 'package:qvid/Locale/locale.dart';
import 'package:qvid/Routes/routes.dart';
import 'package:qvid/BottomNavigation/MyProfile/followers.dart';
import 'package:qvid/Theme/colors.dart';
import 'package:qvid/BottomNavigation/MyProfile/following.dart';

class UserProfilePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return UserProfileBody();
  }
}

class UserProfileBody extends StatefulWidget {
  @override
  _UserProfileBodyState createState() => _UserProfileBodyState();
}

class _UserProfileBodyState extends State<UserProfileBody> {
  bool isFollowed = false;

  var followText;
  final key = UniqueKey();

  @override
  Widget build(BuildContext context) {
    var locale = AppLocalizations.of(context);
    return Scaffold(
      backgroundColor: darkColor,
      body: DefaultTabController(
        length: 2,
        child: SafeArea(
          child: NestedScrollView(
            headerSliverBuilder:
                (BuildContext context, bool innerBoxIsScrolled) {
              return <Widget>[
                SliverAppBar(
                  expandedHeight: 400.0,
                  floating: false,
                  actions: <Widget>[
                    PopupMenuButton(
                      color: backgroundColor,
                      icon: Icon(
                        Icons.more_vert,
                        color: secondaryColor,
                      ),
                      shape: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(12.0),
                          borderSide: BorderSide.none),
                      itemBuilder: (BuildContext context) {
                        return [
                          PopupMenuItem(
                            child: Text(locale!.report!),
                            value: locale.report,
                            textStyle: TextStyle(color: secondaryColor),
                          ),
                          PopupMenuItem(
                            child: Text(locale.block!),
                            value: locale.block,
                            textStyle: TextStyle(color: secondaryColor),
                          ),
                        ];
                      },
                    )
                  ],
                  flexibleSpace: FlexibleSpaceBar(
                    centerTitle: true,
                    title: SingleChildScrollView(
                      scrollDirection: Axis.horizontal,
                        child: Column(
                      children: <Widget>[
                        Spacer(flex: 10),
                        FadedScaleAnimation(
                          child: CircleAvatar(
                            radius: 28.0,
                            backgroundImage:
                                AssetImage('assets/user/user1.png'),
                          ),
                        ),
                        Spacer(),
                        Expanded(
                          flex: 2,
                          child: Row(
                            children: [
                              Spacer(flex: 12),
                              Text(
                                'Emili Williamson',
                                style: TextStyle(fontSize: 16),
                              ),
                              Spacer(),
                              Image.asset(
                                'assets/icons/ic_verified.png',
                                scale: 4,
                              ),
                              Spacer(flex: 8),
                            ],
                          ),
                        ),
                        Text(
                          '@emilithedancer',
                          style:
                              TextStyle(fontSize: 10, color: disabledTextColor),
                        ),
                        Spacer(),
                        FadedScaleAnimation(
                          child: Expanded(
                            flex: 2,
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: <Widget>[
                                ImageIcon(
                                  AssetImage(
                                    "assets/icons/ic_fb.png",
                                  ),
                                  color: secondaryColor,
                                  size: 10,
                                ),
                                SizedBox(
                                  width: 15,
                                ),
                                ImageIcon(
                                  AssetImage("assets/icons/ic_twt.png"),
                                  color: secondaryColor,
                                  size: 10,
                                ),
                                SizedBox(
                                  width: 15,
                                ),
                                ImageIcon(
                                  AssetImage("assets/icons/ic_insta.png"),
                                  color: secondaryColor,
                                  size: 10,
                                ),
                              ],
                            ),
                          ),
                        ),
                        Spacer(),
                        Text(
                          locale!.comment7!,
                          textAlign: TextAlign.center,
                          style: TextStyle(
                              fontSize: 10, fontWeight: FontWeight.w500),
                        ),
                        Spacer(),
                        Expanded(
                          flex: 2,
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              ProfilePageButton(
                                  locale.message,
                                  () => Navigator.pushNamed(
                                      context, PageRoutes.chatPage)),
                              SizedBox(width: 16),
                              isFollowed
                                  ? ProfilePageButton(locale.following, () {
                                      setState(() {
                                        isFollowed = false;
                                      });
                                    })
                                  : ProfilePageButton(
                                      locale.follow,
                                      () {
                                        setState(() {
                                          isFollowed = true;
                                        });
                                      },
                                      color: mainColor,
                                      textColor: secondaryColor,
                                    ),
                            ],
                          ),
                        ),
                        Spacer(),
                        Expanded(
                          flex: 2,
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                            children: <Widget>[
                              RowItem(
                                  '1.2m',
                                  locale.liked,
                                  Scaffold(
                                    appBar: AppBar(
                                      title: Text('Liked'),
                                    ),
                                    body: TabGrid(
                                      food   lol,
                                    ),
                                  )),
                              RowItem('12.8k', locale.followers, FollowersPage()),
                              RowItem('1.9k', locale.following, FollowingPage()),
                            ],
                          ),
                        ),
                      ],
                    )),
                  ),
                ),
                SliverPersistentHeader(
                  delegate: SliverAppBarDelegate(
                    TabBar(
                      labelColor: mainColor,
                      unselectedLabelColor: lightTextColor,
                      indicatorColor: transparentColor,
                      tabs: [
                        Tab(icon: Icon(Icons.dashboard)),
                        Tab(
                          icon: ImageIcon(AssetImage(
                            'assets/icons/ic_like.png',
                          )),
                        ),
                      ],
                    ),
                  ),
                  pinned: true,
                ),
              ];
            },
            body: TabBarView(
              children: <Widget>[
                FadedSlideAnimation(
                  child: TabGrid(dance),
                  beginOffset: Offset(0, 0.3),
                  endOffset: Offset(0, 0),
                  slideCurve: Curves.linearToEaseOut,
                ),
                FadedSlideAnimation(
                  child: TabGrid(food   lol),
                  beginOffset: Offset(0, 0.3),
                  endOffset: Offset(0, 0),
                  slideCurve: Curves.linearToEaseOut,
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
 

Комментарии:

1. scrollDirection: Axis.horizontal, внутри твоего SingleChildScrollView ? это опечатка ?

2. Да, но когда я меняю его на Axis.vertical, приложение продолжает приостанавливаться с надписью «Основная изоляция приостановлена в отладчике».

3. Как только у меня возникла эта проблема, я завернул с fittedBox

4. @jdog Было бы быстрее перезапустить, чем исправить это. Почти единственное, что правильно в этом коде, — это то, что body: a NestedScrollView -это a TabBarView . Мое предложение состоит в том, чтобы переделать этот виджет после прочтения документов и изучения того, как предназначены для использования фрагменты/прокрутки. Поверь мне, так будет проще. Чтобы вы знали, что я не просто пытаюсь быть злым, вот несколько вопросов, которые следует рассмотреть:

5. @jdog почему TabBar вы находитесь SliverPersistentHeader внутри headerSliverBuilder: , а не в bottom: поле вашего SliverAppBar зрения ? Почему у вас есть Expanded виджеты непосредственно внутри a SingleChildScrollView ? Как они должны знать, когда следует прекратить расширение? Почему у тебя SingleChildScrollView внутри FlexibleSpaceBar что-то есть ? Если вы просто хотите перетащить нижний виджет вверх, почему вы не используете DraggableScrollableSheet вместо NestedScrollView этого ?

Ответ №1:

Ошибка вызвана в этой строке. Удалите эту строку и посмотрите, видите ли вы все ту же проблему в строке над ней. Если вы это сделаете, то я думаю, что это как-то связано с кодом ниже. Является ли код ниже этого также в singlechildscrollview или расширен? если его нет, то добавьте его. я разговариваю по телефону, поэтому мне трудно четко видеть синтаксис.

                 Spacer(),
                    Expanded(
                      flex: 2,
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                        children: <Widget>[
                          RowItem(
                              '1.2m',
                              locale.liked,
                              Scaffold(
                                appBar: AppBar(
                                  title: Text('Liked'),
                                ),
                                body: TabGrid(
                                  food   lol,
                                ),
                              )),
                          RowItem('12.8k', locale.followers, FollowersPage()),
                          RowItem('1.9k', locale.following, FollowingPage()),
                        ],
                      ),
                    ),
                  ],
                )),
              ),
            ),
 

Комментарии:

1. Я удалил его, и у него та же проблема.

Ответ №2:

Как сказано в документе, вы не можете использовать Expanded виджет внутри дочернего элемента FadedScaleAnimation Вы должны использовать Expanded виджет только в качестве прямого дочернего Row/Column/Flex элемента, потому что это гибкие виджеты

Попробуйте поместить FadedScaleAnimation внутренний Expanded виджет в свой Column виджет, Expanded виджет должен быть прямым потомком вашего Column