加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

dart – 颤振垂直视口无界高度误差

发布时间:2020-12-14 14:49:00 所属栏目:百科 来源:网络整理
导读:我做了一个应用程序来显示一个州的医院列表. 这是Main.dart import 'package:flutter/material.dart';import 'package:url_launcher/url_launcher.dart';import 'dart:async' show Future;import 'package:flutter/services.dart' show rootBundle;import 'd
我做了一个应用程序来显示一个州的医院列表.

这是Main.dart

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
import 'dart:convert';
import 'package:emas_app/model/accounts_model.dart';

Future<String> _loadAsset() async{
  return await rootBundle.loadString('Assets/accounts.json');
}

Future<Accounts> loadAccounts() async{

  final response = await _loadAsset();
  final jsonResponse = json.decode(response);

  Accounts accounts = new Accounts.fromJson(jsonResponse);

  return accounts;
}

class ProviderList extends StatefulWidget {

  @override
  ListState createState() {
    return new ListState();
  }
}

class ListState extends State<ProviderList> {

  @override
  Widget build(BuildContext context) {

    Widget newbody = new ExpansionTile(
        title: new Text("State Name"),children: <Widget>[
          new FutureBuilder<Accounts>(
              future: loadAccounts(),builder: (context,snapshot){
                if(snapshot.hasData){

                return new ListView.builder(
                      itemCount: snapshot.data.accountinfo.length,itemBuilder: (context,index){

                        String username = snapshot.data.accountinfo[index].name;
                        String address = snapshot.data.accountinfo[index].street;
                        String lat = snapshot.data.accountinfo[index].coordinates.lat;
                        String lng = snapshot.data.accountinfo[index].coordinates.lng;

                        return new ListTile(
                            title: new Text(username),trailing: new Row(
                              mainAxisSize: MainAxisSize.min,mainAxisAlignment: MainAxisAlignment.end,children: <Widget>[
                                new IconButton(
                                    icon: Icon(Icons.info),onPressed: null
                                ),new IconButton(
                                    icon: Icon(Icons.directions),onPressed: null
                                )
                              ],)
                        );
                      });
                }else{
                  return new Center(
                    child: new CircularProgressIndicator(),);
                }
              })
    ]);

    return new Scaffold(
      appBar: new AppBar(title: new Text("Providers")),body: newbody
    );
  }
}

这是显示扩展的ExpansionTile为空的输出:

Providers List

这是错误抓住:

I/flutter ( 6305): Vertical viewport was given unbounded height.
I/flutter ( 6305): Viewports expand in the scrolling direction to fill their container.In this case,a vertical
I/flutter ( 6305): viewport was given an unlimited amount of vertical space in which to expand. This situation
I/flutter ( 6305): typically happens when a scrollable widget is nested inside another scrollable widget.

我已经尝试了我可以在Stack Overflow中找到的所有可能的解决方案,通过使用Expanded或Flexible包装ListView.builder但它不起作用.关于如何解决这个问题的任何想法?

解决方法

有两种解决方案:

>使用ListView的shrinkWrap属性

new ListView.builder(
        shrinkWrap: true,itemCount: ...

原因:

在您的情况下,ListView位于ExpansionTile中. ExpansionTile将展示扩展并展示有多少孩子.当ListView放置在ExpansionTile(无界约束小部件)中时,ListView将扩展到scrollDirection中的最大大小.根据文档,

If the scroll view does not shrink wrap,then the scroll view will expand
to the maximum allowed size in the [scrollDirection]. If the scroll view
has unbounded constraints in the [scrollDirection],then [shrinkWrap] must
be true.

>使用SizedBox为ListView提供固定高度.

SizedBox(height: 200.0,child: new ListView.builder(...))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读