如何在flutter中的列下使用scrollview?

问题描述

在编写应用程序时,我想使应用程序栏和底部导航栏不可滚动,但是当我使用滚动视图时,出现了错误。查看代码:

import 'package:CovidTraces/CustomGridview.dart';
import 'package:CovidTraces/customnavbar.dart';
import 'package:flutter/material.dart';
import 'customappbar.dart';


class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Column(
          children: [
            CustomAppBar(),SingleChildScrollView(
              child: Column(
                children: [
                  MyCustomGridview(),],),bottomNavigationBar: MyCustomNavBar(),);
  }
}

这给我一个错误

 SingleChildScrollView 
lib\home.dart:14
════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: RenderBox was not laid out: RenderCustomPaint#834e2 relayoutBoundary=up3 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

════════ Exception caught by rendering library ═════════════════════════════════
RenderBox was not laid out: RenderCustomPaint#834e2 relayoutBoundary=up3 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
'package:flutter/src/rendering/box.dart':
Failed assertion: line 1702 pos 12: 'hasSize'
The relevant error-causing widget was
    SingleChildScrollView 
lib\home.dart:14
════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#faba4 relayoutBoundary=up2 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE

════════ Exception caught by rendering library ═════════════════════════════════
RenderBox was not laid out: RenderRepaintBoundary#faba4 relayoutBoundary=up2 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
'package:flutter/src/rendering/box.dart':
Failed assertion: line 1702 pos 12: 'hasSize'
The relevant error-causing widget was
    Column 
lib\home.dart:11
════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#faba4 relayoutBoundary=up2 NEEDS-PAINT

════════ Exception caught by rendering library ═════════════════════════════════
RenderBox was not laid out: RenderRepaintBoundary#faba4 relayoutBoundary=up2 NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 1702 pos 12: 'hasSize'
The relevant error-causing widget was
    Column 

...还有更多类似的东西 您能识别出这一点并帮助我将gridview用作scrollview吗?

这是自定义应用栏

import 'package:CovidTraces/CustomGridview.dart';
import 'package:flutter/material.dart';
import 'constraints.dart';

Constraints color = new Constraints();

class CustomAppBar extends StatelessWidget {
  Widget IconsContainer(String imgsrc,String message) {
    return InkWell(
      onTap: () {
        print('$message');
      },child: Container(
        height: 55.0,width: 70.0,decoration: new BoxDecoration(
          color: color.primary,shape: BoxShape.circle,child: Padding(
          padding: const EdgeInsets.all(10.0),child: Image.asset(
            '$imgsrc',);
  }

  @override
  Widget build(BuildContext context) {
    double height = MediaQuery.of(context).size.height;
    double width = MediaQuery.of(context).size.width;
    return Column(
      children: [
        Padding(
          padding: const EdgeInsets.all(8.0),child: Row(
            children: [
              IconsContainer('assets/images/menu.png','menu clicked...'),Spacer(),Text(
                'CoVID TRACES',style: TextStyle(
                  color: color.writingHead,fontSize: 25.0,fontFamily: 'Poppins',fontWeight: FontWeight.bold,IconsContainer('assets/images/refresh.png','refreshing...'),SingleChildScrollView(
          child: Column(
            children: [
              Stack(
                overflow: Overflow.visible,children: [
                  CustomPaint(
                    painter: MyCustomPainter(),child: ClipPath(
                      clipper: MyCustomClip(),child: Container(
                        decoration: new BoxDecoration(
                          gradient: new LinearGradient(
                            begin: Alignment.topLeft,end: Alignment.bottomRight,colors: [
                              color.custombarG1,color.custombarG2,height: height / 2 - 50,width: width,Positioned(
                    left: -40.0,top: 10.0,child: Image.asset(
                      'assets/images/covid3.png',height: 310.0,Align(
                    alignment: Alignment.topRight,child: Padding(
                      padding: const EdgeInsets.only(top: 20.0,right: 2.0),child: Column(
                        crossAxisAlignment: CrossAxisAlignment.end,children: [
                          Text(
                            'CoVID-19',style: TextStyle(
                              color: color.writingTitle,fontSize: 40.0,Padding(
                            padding: const EdgeInsets.all(3.0),child: Text(
                              'TRACKER',style: TextStyle(
                                color: color.primary,fontSize: 30.0,fontStyle: FontStyle.italic,height: 1.2,Padding(
                            padding: const EdgeInsets.only(right: 40),child: Text(
                              '+',style: TextStyle(
                                color: color.writingHead,fontSize: 35.0,height: 0.75,Padding(
                            padding: const EdgeInsets.only(right: 12.0),child: Text(
                              'CASES',style: TextStyle(
                                color: color.writingTitle,Text(
                            'IN SECONDS',style: TextStyle(
                              color: color.writingSubHead,height: 1.5,Text(
                            'WorldWide',height: 3.5,Container(
                height: 200,child: GridView.count(
                  scrollDirection: Axis.vertical,crossAxisCount: 2,children: List.generate(50,(index) {
                    return Container(
                      // color: color.primary,child: Card(
                        color: color.primary,);
                  }),);
  }
}

class MyCustomClip extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    Path path = new Path();
    path.lineTo(0.0,size.height - 80);
    var firstCPoint = new Offset((size.width / 4) - 20,(size.height) / 2 - 50);
    var firstEPoint = new Offset((size.width / 2 + 30),size.height - 70);
    path.quadraticBezierTo(
        firstCPoint.dx,firstCPoint.dy,firstEPoint.dx,firstEPoint.dy);
    var secondCPoint = new Offset(size.width * 0.9,size.height + 60);
    var secondEPoint = new Offset(size.width,size.height / 2 + 50);
    path.quadraticBezierTo(
        secondCPoint.dx,secondCPoint.dy,secondEPoint.dx,secondEPoint.dy);

    path.lineTo(size.width,0.0);
    path.close();
    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) {
    return false;
  }
}

class MyCustomPainter extends CustomPainter {
  @override
  void paint(Canvas canvas,Size size) {
    Path path = new Path();
    path.lineTo(0.0,0.0);
    path.close();
    canvas.drawShadow(path,30.0,false);
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    return true;
  }
}

这是自定义导航栏

import 'package:CovidTraces/customappbar.dart';
import 'package:curved_navigation_bar/curved_navigation_bar.dart';
import 'package:flutter/material.dart';

class MyCustomNavBar extends StatefulWidget {
  @override
  _MyCustomNavBarState createState() => _MyCustomNavBarState();
}

class _MyCustomNavBarState extends State<MyCustomNavBar> {
  @override
  Widget build(BuildContext context) {
    return CurvedNavigationBar(
      height: 50.0,index: 2,color: color.primary,animationCurve: Curves.easeInCubic,backgroundColor: Colors.transparent,animationDuration: new Duration(
        milliseconds: 200,items: [
        Image.asset(
          'assets/images/add.png',height: 30.0,width: 30.0,Image.asset(
          'assets/images/about.png',Image.asset(
          'assets/images/home.png',Image.asset(
          'assets/images/contact.png',Image.asset(
          'assets/images/chat.png',);
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)