Почему это приводит к ошибке «пустой белый»?, весь полный код включен

#flutter #singlechildscrollview

#трепетать #однопрофильный просмотр

Вопрос:

Почему это производит blank white ? Мне нужно, чтобы окно прокрутки прокручивалось под виджетом, который остается неподвижным. Весь полный код приведен ниже. Каждый виджет nested by each of their ancestors (пример изображения наследования приведен ниже). Я заметил , что если вы используете напрямую elder child widget в обход parent widget , то это хорошо работает. Но мне нужно использовать его следующим образом (необходимо использовать все виджеты, включая parent ).

Виджет «Великий родитель»

 import 'package:app3/screens/Parent.dart'; import 'package:flutter/material.dart';  int currentIndex1 = 0;  class GrandParent extends StatefulWidget {  const GrandParent({Key? key}) : super(key: key);   @override  _GrandParentState createState() =gt; _GrandParentState(); }  class _GrandParentState extends Statelt;GrandParentgt;  with SingleTickerProviderStateMixin {  final pages = [  Parent(),  ];   late TabController _tabbarcontroller;  int _currentIndexNavBar = 0;   @override  void initState() {  super.initState();  _tabbarcontroller = new TabController(length: pages.length, vsync: this);  }   @override  void dispose() {  _tabbarcontroller.dispose();  super.dispose();  }   @override  Widget build(BuildContext context) {  return Scaffold(  body: SafeArea(  // child: (pages[currentIndex1]),  child: new TabBarView(  controller: _tabbarcontroller,  children: pages.toList(),  ),  ),  bottomNavigationBar: new BottomNavigationBar(  currentIndex: _currentIndexNavBar,  onTap: (value) {  setState(() {  _tabbarcontroller.index = value;  _currentIndexNavBar = value;  });  },  items: [  BottomNavigationBarItem(  icon: Icon(Icons.home),  label: 'Parent',  backgroundColor: Colors.blue),  BottomNavigationBarItem(  icon: Icon(Icons.home),  label: 'Parent',  backgroundColor: Colors.blue),  ],  ),  );  } }  

Родительский виджет

 import 'package:app3/widgets/Posts/SeenByOthers/PostBody/ElderChild.dart';  import 'package:flutter/material.dart';    class Parent extends StatefulWidget {  const Parent({Key? key}) : super(key: key);    @override  _ParentState createState() =gt; _ParentState();  }    class _ParentState extends Statelt;Parentgt; {  @override  Widget build(BuildContext context) {    return Column(  crossAxisAlignment: CrossAxisAlignment.center,  children: lt;Widgetgt;[  Container(  width: 100,  height: 2500,  color: Colors.green,  child: Text('Main bar'),  ),  ElderChild(),  ]);  }  }  

Elder Child widget

 import 'package:app3/widgets/Posts/SeenByOthers/PostBody/YoungerChild.dart';  import 'package:flutter/material.dart';    class ElderChild extends StatefulWidget {  const ElderChild({Key? key}) : super(key: key);    @override  _ElderChildState createState() =gt; _ElderChildState();  }    class _ElderChildState extends Statelt;ElderChildgt; {  @override  Widget build(BuildContext context) {  return Column(  crossAxisAlignment: CrossAxisAlignment.center,  children: lt;Widgetgt;[  Container(  width: 100,  color: Colors.red,  child: Padding(  padding: EdgeInsets.all(5),  child: Text('Elder bar'),  ),  ),  Expanded(  child: SingleChildScrollView(  child: Column(  mainAxisAlignment: MainAxisAlignment.center,  children: lt;Widgetgt;[  Padding(padding: EdgeInsets.all(15), child: YoungerChild())  ])))  ],  );  }  }  

Younger child widget

 import 'package:flutter/material.dart';  class YoungerChild extends StatefulWidget {  const YoungerChild({Key? key}) : super(key: key);   @override  _YoungerChildState createState() =gt; _YoungerChildState(); }  class _YoungerChildState extends Statelt;YoungerChildgt; {  @override  Widget build(BuildContext context) {  return Column(  mainAxisAlignment: MainAxisAlignment.center,  children: lt;Widgetgt;[  Container(  width: 100,  height: 2500,  color: Colors.amber, child: Text('This is a scroll view, This is a scroll view'),  )  ]);  } }  

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

Ответ №1:

Если вы используете Column внутри Column один за другим, то он будет сбрасывать error unbounded высоту, чтобы избавиться от этой ошибки, попробуйте использовать столбец внутри виджета, который имеет bounded height свойство или несколько раз mainAxisSize также может вам помочь

 Column(  mainAxisSize: MainAxisSize.min,  children: []  )