微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

dart - 颤动单个子滚动视图更改屏幕的小部件布局

如何解决dart - 颤动单个子滚动视图更改屏幕的小部件布局

我正在尝试使用单个子滚动视图小部件使我的颤动页面可滚动。但是这样做之后,屏幕的整个小部件布局都搞砸了。下面我附上了我的应用程序的屏幕截图,它显示了我想要发生的事情,而是在我使用单个子滚动视图小部件后发生的事情。

import 'package:Flutter/material.dart';
import 'package:formula1_app/models/driver_model.dart';

class DriverBioScreen extends StatefulWidget {

  final Driver driver;

  DriverBioScreen({required this.driver});

  @override
  _DriverBioScreenState createState() => _DriverBioScreenState();
}

class _DriverBioScreenState extends State<DriverBioScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
          children: [
            Container(
              height: 1500,width: MediaQuery.of(context).size.width,child: Stack(
                children: [
                  Container(
                    height: 250,decoration: Boxdecoration(
                      color: Colors.blue,borderRadius: BorderRadius.circular(30),),child: ClipRRect(
                      borderRadius: BorderRadius.circular(30),child: Image(
                        image: Assetimage('assets/images/driver_profile_bg_darken.jpg'),fit: BoxFit.cover,)
                    ),Padding(
                    padding: EdgeInsets.symmetric(vertical: 30,horizontal: 20),child: Row(
                      children: [
                        IconButton(
                          icon: Icon(Icons.arrow_back),iconSize: 30,color: Colors.white,onpressed: () {
                            Navigator.pop(context);
                          },)
                      ],SafeArea(
                    child: Padding(
                      padding: const EdgeInsets.only(top: 0,left: 20),child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [
                          Row(
                            children: [
                              Container(
                                height: 80,width: 4,decoration: Boxdecoration(
                                  color: Colors.blue[800]
                                ),Padding(
                                padding: const EdgeInsets.only(left: 10),child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,children: [
                                    Text(
                                      widget.driver.firstName,style: TextStyle(
                                        fontSize: 25,color: Colors.white
                                      ),Text(
                                      widget.driver.lastName,style: TextStyle(
                                        fontSize: 32,fontWeight: FontWeight.bold
                                      ),Row(
                                      children: [
                                        Text(
                                          widget.driver.number,style: TextStyle(
                                            fontSize: 18,fontWeight: FontWeight.bold
                                          ),Text(
                                          ' | ${widget.driver.team}',)
                                      ],)
                                  ],],Image(
                            image: Assetimage(widget.driver.driverImageUrl),height: 200,// 200
                            width: 200,//200
                          ),)
                ],Column(
              children: [
                Column(
                  children: [
                    Text(
                      "Achievements",style: TextStyle(
                        fontSize: 32,fontWeight: FontWeight.bold
                      ),Padding(
                      padding: EdgeInsets.only(top: 0,child: Row(
                        crossAxisAlignment: CrossAxisAlignment.start,children: [
                          Container(
                            height: 400,width: 228,child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [
                                Text(
                                  'Wins',style: TextStyle(
                                    fontSize: 30,fontWeight: FontWeight.bold
                                  ),Text(
                                  'Podiums',Text(
                                  'dhl Fastest Laps',style: TextStyle(
                                    fontSize: 25,Text(
                                  'Grands Prix Entered',Text(
                                  'World Championships',)
                              ],Padding(
                            padding: EdgeInsets.only(left: 80),child: Container(
                              height: 400,width: 100,child: Column(
                                crossAxisAlignment: CrossAxisAlignment.start,children: [
                                  Padding(
                                    padding: EdgeInsets.only(top: 29),child: Text(
                                      (widget.driver.wins),style: TextStyle(
                                        fontSize: 30
                                      ),Padding(
                                    padding: EdgeInsets.only(top: 29),child: Text(
                                      widget.driver.podiums,Padding(
                                    padding: EdgeInsets.only(top: 25),child: Text(
                                      widget.driver.fastestLap,Padding(
                                    padding: EdgeInsets.only(top: 40),child: Text(
                                      widget.driver.gpEntered,Padding(
                                    padding: EdgeInsets.only(top: 59),child: Text(
                                      widget.driver.worldchampionships,style: TextStyle(
                                        fontSize: 30,)
                        ],Column(
                      children: [
                        Text(
                          'Team',style: TextStyle(
                            fontSize: 32,fontWeight: FontWeight.bold
                          ),// Image(
                        //   image: Assetimage(widget.driver.team),// )
                      ],)///,)
    );
  }
}
This is a screenshot of what I wanted

This is what happens after i added the singlechildscrolview widget

解决方法

您可以使用ListView

class _DriverBioScreenState extends State<DriverBioScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        children: [
          Container(
            height: 1500,width: MediaQuery.of(context).size.width,child: Stack(
              children: [
                Container(
                  height: 250,decoration: BoxDecoration(
                    color: Colors.blue,borderRadius: BorderRadius.circular(30),),child: ClipRRect(
                      borderRadius: BorderRadius.circular(30),child: Image(
                        image: AssetImage(
                            'assets/images/driver_profile_bg_darken.jpg'),fit: BoxFit.cover,)),Padding(
                  padding: EdgeInsets.symmetric(vertical: 30,horizontal: 20),child: Row(
                    children: [
                      IconButton(
                        icon: Icon(Icons.arrow_back),iconSize: 30,color: Colors.white,onPressed: () {
                          Navigator.pop(context);
                        },)
                    ],SafeArea(
                  child: Padding(
                    padding: const EdgeInsets.only(top: 0,left: 20),child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [
                        Row(
                          children: [
                            Container(
                              height: 80,width: 4,decoration:
                                  BoxDecoration(color: Colors.blue[800]),Padding(
                              padding: const EdgeInsets.only(left: 10),child: Column(
                                crossAxisAlignment: CrossAxisAlignment.start,children: [
                                  Text(
                                    widget.driver.firstName,style: TextStyle(
                                        fontSize: 25,color: Colors.white),Text(
                                    widget.driver.lastName,style: TextStyle(
                                        fontSize: 32,fontWeight: FontWeight.bold),Row(
                                    children: [
                                      Text(
                                        widget.driver.number,style: TextStyle(
                                            fontSize: 18,Text(
                                        ' | ${widget.driver.team}',style: TextStyle(
                                          fontSize: 18,)
                                    ],)
                                ],],Image(
                          image: AssetImage(widget.driver.driverImageUrl),height: 200,// 200
                          width: 200,//200
                        ),)
              ],Column(
            children: [
              Column(
                children: [
                  Text(
                    "Achievements",style: TextStyle(fontSize: 32,Padding(
                    padding: EdgeInsets.only(top: 0,child: Row(
                      crossAxisAlignment: CrossAxisAlignment.start,children: [
                        Container(
                          height: 400,width: 228,child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [
                              Text(
                                'Wins',style: TextStyle(
                                    fontSize: 30,Text(
                                'Podiums',Text(
                                'DHL Fastest Laps',style: TextStyle(
                                    fontSize: 25,Text(
                                'Grands Prix Entered',Text(
                                'World Championships',)
                            ],Padding(
                          padding: EdgeInsets.only(left: 80),child: Container(
                            height: 400,width: 100,child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,children: [
                                Padding(
                                  padding: EdgeInsets.only(top: 29),child: Text(
                                    (widget.driver.wins),style: TextStyle(fontSize: 30),Padding(
                                  padding: EdgeInsets.only(top: 29),child: Text(
                                    widget.driver.podiums,Padding(
                                  padding: EdgeInsets.only(top: 25),child: Text(
                                    widget.driver.fastestLap,Padding(
                                  padding: EdgeInsets.only(top: 40),child: Text(
                                    widget.driver.gpEntered,Padding(
                                  padding: EdgeInsets.only(top: 59),child: Text(
                                    widget.driver.worldchampionships,style: TextStyle(
                                      fontSize: 30,)
                      ],Column(
                    children: [
                      Text(
                        'Team',style: TextStyle(
                            fontSize: 32,// Image(
                      //   image: AssetImage(widget.driver.team),// )
                    ],)

          ///,);
  }
}
,

用扩展包装图像小部件

    Expanded(
        child:Image(
           image: AssetImage(widget.driver.driverImageUrl),// 200
           width: 200,//200
         ),

因为您的图像小部件占用了所有空间

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。