#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: [] )