Flutter-如何在Flutter中将滚动视图添加到具有ListView的列

如何解决Flutter-如何在Flutter中将滚动视图添加到具有ListView的列

我有一个容器,该容器的列包含三个容器和一个用expand包裹的listview,可以很好地工作,但是我正在尝试向整个容器中添加一个滚动视图,以便在三个带有listview的滚动中,请问如何实现这一点?下面是我的代码。


List<Content> content = [];

_fetchComments() async {
    setState(() {
      isLoading = true;
      _isDealButtonRefresh = true;
    });

    try {
      final result = await InternetAddress.lookup('google.com');
      if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
        print('connected');

        String baseURL;

        debugPrint("my select:$_mySelection");

        if (_mySelection == null && _myFeatureSelection == null) {
          baseURL = "myjson link";
          
        } else if (_myFeatureSelection != null) {
          baseURL =
              "my json link" +
                  _myFeatureSelection;
          debugPrint("feature enter");

          _mySelection = null;
        } else if (_mySelection != null && _myFeatureSelection == null) {
          baseURL = "my json link" +
              _mySelection;
          
        }

        print("our url:$baseURL");

        final response = await http.get(baseURL);
        if (response.statusCode == 200) {
          print(response.body);
          content = (json.decode(response.body) as List)
              .map((data) => new Content.fromJson(data))
              .toList();
          setState(() {
            print(response.body);
            isLoading = false;
            _isDealButtonRefresh = false;
          });
        } else {
          print(response.body);
          throw Exception('Failed to load post');
        }
      }
    } on SocketException catch (_) {
      print('not connected');
      setState(() => isLoading = false);

      Navigator.pushReplacement(
          context,new MaterialPageRoute(
              builder: (BuildContext context) => NoInternet()));

    }
  }

initState() {
    super.initState();
_fetchComments();
  }

body: Container(
        child: Column(children: <Widget>[

Container(),Container(),Expanded(child: ListView.separated(
                                                separatorBuilder:
                                                    (context,index) => Divider(
                                                          color: Colors.grey,),itemCount: content == null
                                                    ? 0
                                                    : _searchResult.length,itemBuilder:
                                                    (context,position) {
                                                  final current =
                                                      _searchResult[position];
                                                  double myrate = double.parse(
                                                      _searchResult[position]
                                                                  .ratings ==
                                                              null
                                                          ? "0"
                                                          : _searchResult[position]
                                                              .ratings);
                                                  debugPrint("rato:$myrate");
                                                  return FutureBuilder<String>(
                                                      future: getDistance(
                                                              current.lat,current.lng)
                                                          .then((value) =>
                                                              value.toString()),builder:
                                                          (context,snapshot) {
                                                        return Container(
                                                           
                                                            child:
                                                                GestureDetector(
                                                                    onTap: () {
                                                                      Navigator.push(
                                                                          context,CupertinoPageRoute(
                                                                              builder: (BuildContext ctx) => Maps(_searchResult[position])));
                                                                    },child:
                                                                        Column(
                                                                      children: <
                                                                          Widget>[
                                                                        Row(
                                                                          children: <
                                                                              Widget>[
                                                                            Expanded(
                                                                                child:Container(
                                                                                  height:150,width: MediaQuery.of(context).size.width,child: SizedBox(
                                                                                    child: FadeInImage(image: NetworkImage(_searchResult[position].thumbnail_name),placeholder: AssetImage("assets/640x360.png"),fit: BoxFit.cover,)),],Container(
                                                                          padding:
                                                                              const EdgeInsets.all(5.0),child:
                                                                              Row(
                                                                            crossAxisAlignment:
                                                                                CrossAxisAlignment.start,children: <Widget>[
                                                                              Expanded(
                                                                                child: Column(
                                                                                  children: <Widget>[
                                                                                    Container(
                                                                                      padding: const EdgeInsets.only(bottom: 1.0),child: Text(
                                                                                        _searchResult[position].title,style: TextStyle(fontFamily: 'Montserrat',fontSize: 13,fontWeight: FontWeight.bold),Container(
                                                                                      padding: const EdgeInsets.only(bottom: 1.0),child: Text(
                                                                                        _searchResult[position].address,maxLines: 2,fontSize: 10,color: Colors.black54),child: _status != PermissionStatus.denied
                                                                                          ? snapshot.hasData
                                                                                              ? Text(
                                                                                                  snapshot.data + " " + "km",maxLines: 1,fontWeight: FontWeight.bold,color: colorBlue),)
                                                                                              : SizedBox(
                                                                                                  child: CircularProgressIndicator(
                                                                                                    valueColor: new AlwaysStoppedAnimation<Color>(
                                                                                                      colorBlue,strokeWidth: 1,height: 5.0,width: 5.0,)
                                                                                          : Icon(
                                                                                              Icons.do_not_disturb,color: Colors.red,size: 15,SizedBox(
                                                                                      height: 2,Container(
                                                                                                                                                                           child: Text(
                                                                                        _searchResult[position].price + " " + "USD",style: TextStyle(
                                                                                          color: colorPink,fontSize: 12,fontFamily: 'Montserrat',)
                                                                                  ],crossAxisAlignment: CrossAxisAlignment.start,flex: 9,Column(
                                                                                children: <Widget>[
                                                                                  Container(
                                                                                      padding: const EdgeInsets.only(bottom: 0),child: SmoothStarRating(
                                                                                          allowHalfRating: false,onRatingChanged: (v) {
                                                                                            setState(() {});
                                                                                          },starCount: 5,rating: myrate,size: 12.0,filledIconData: Icons.star,halfFilledIconData: Icons.star_half,color: Colors.orange,borderColor: Colors.orange,spacing: 0.0)),Text(
                                                                                    "(" + myrate.toStringAsFixed(1) + ")",style: TextStyle(color: Colors.black,fontStyle: FontStyle.normal),)
                                                                            ],)
                                                                      ],)));
                                                      });
                                                }))

])

)

在上面的代码中,listview从json rest API获取数据。

解决方法

因此,经过几个月的研究,终于可以通过给出每个容器的高度来解决此问题。由于我希望listview的高度能够覆盖活动中的大部分空间,因此我没有使用ListView设置Container的高度。首先,我将上面的#include<stdio.h> int summation(int); int main(){ int val,sum; scanf("%d",&val); sum=summation(val<0?-val:val);//We need the absolute value printf("%d",sum); return 0; } //Get the sum recurcively int summation(int v){ if(v==0) return 0; return (v%10)+summation(v/10);//v%10 is the reminder which is the last digit } 更改为package com.examplehub.sorts; public class BubbleSortRecursion implements Sort { @Override public void sort(int[] numbers) { sortRecursion(numbers,numbers.length); } /** * BubbleSort algorithm implements using recursion. * * @param numbers the numbers to be sorted. * @param length the length of numbers. */ public void sortRecursion(int[] numbers,int length) { boolean swapped = false; for (int i = 0; i < length - 1; ++i) { if (numbers[i] > numbers[i + 1]) { int temp = numbers[i]; numbers[i] = numbers[i + 1]; numbers[i + 1] = temp; swapped = true; } } if (!swapped) { return; } sortRecursion(numbers,length - 1); } @Override public <T extends Comparable<T>> void sort(T[] array) { sortRecursion(array,array.length); } /** * Generic BubbleSort algorithm implements using recursion. * * @param array the array to be sorted. * @param length the length of array. * @param <T> the class of the objects in the array. */ public <T extends Comparable<T>> void sortRecursion(T[] array,int length) { boolean swapped = false; for (int i = 0; i < length - 1; ++i) { if (array[i].compareTo(array[i + 1]) > 0) { T temp = array[i]; array[i] = array[i + 1]; array[i + 1] = temp; swapped = true; } } if (!swapped) { return; } sortRecursion(array,length - 1); } } ,设置了ListView Expanded()。在下面找到我的更新代码:

Container()
,

您可以将3个内部容器添加为listview的子容器。

类似这样的东西:

Widget getListView(yourListWithData) {
    List<Widget> listViewChildren = [
      Container(),Container(),];
    listViewChildren.addAll(
      yourListWithData
          .map(
            (e) => Text(e),//text widget as an example,use your own widget
          )
          .toList(),);

    return ListView(
      children: listViewChildren,);
  }

然后您可以摆脱Column并使Listview成为父容器的唯一子项:

 Container(
      child: getListView(yourListWithData),);
,

要解决此问题:

  • SingleChildScrollView属性的开头添加physics: ClampingScrollPhysics()小部件。

  • 向列表视图添加shrinkWrap: true属性。

    SingleChildScrollView(
    scrollDirection: Axis.vertical,physics: ClampingScrollPhysics(),child: Container(
    child: Column( crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
    
    Container(),Expanded(child: Listview.builder(shrinkWrap: true,))
    
    ])
    
    )
    

希望对您有帮助

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

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-