我制作了一个应用程序来显示某个州的医院列表。
这是 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为空白的输出:
这是捕获的错误:
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.
我已尝试通过将ListView.builder包装为Expanded或Flexible来在Stack Overflow中找到的所有可能的解决方案,但是它不起作用。关于如何解决此问题的任何想法?
答案 0 :(得分:12)
有两种解决方案:
使用ListView的 shrinkWrap 属性
new ListView.builder(
shrinkWrap: true,
itemCount: ...
原因:
在您的情况下,ListView
在ExpansionTile
内部。 ExpansionTile
将显示扩展并显示那里有多少个孩子。当ListView放置在ExpansionTile(无限制约束小部件)中时,它将在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(...))