- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个这样的页面:
Axis.vertical
作为默认Axis.horizontal
,itemCount = 3
。为避免错误,我在此height:50
设置为
width:100
Container
Expanded
(1:1:1),它适合屏幕的右侧,无法滚动。 Width
的
Container
将基于Expanded flex
自动调整大小。 fontSize
和Text
的Height
将根据Container
自动调整大小 [
{
"id": 1,
"continent": "North America",
"countries": [
{
"name": "United States",
"capital": "Washington, D.C.",
"language": ["English"]
},
{
"country": "Canada",
"capital": "Ottawa",
"language": ["English", "French"]
},
{
"country": "Mexico",
"capital": "Mexico City",
"language": ["Spanish"]
}
]
},
{
"id": 2,
"continent": "Europe",
"countries": [
{
"country": "Germany",
"capital": "Berlin",
"language": ["German"]
},
{
"country": "United Kingdom",
"capital": "London",
"language": ["English"]
}
]
},
{
"id": 3,
"continent": "Asia",
"country": [
{
"country": "Singapore",
"capital": "Singapore",
"language": ["English","Malay","Mandarin","Tamil"]
}
]
}
]
import 'package:flutter/material.dart';
import 'model/continent_model.dart';
import 'services/continent_services.dart';
class ContinentPage2 extends StatefulWidget {
ContinentPage2() : super();
@override
_ContinentPageState createState() => _ContinentPageState();
}
class _ContinentPageState extends State<ContinentPage2> {
List<Continent> _continent;
@override
void initState() {
super.initState();
ContinentServices.getContinent().then((continents) {
setState(() {
_continent = continents;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('')),
body: ListView.separated(
separatorBuilder: (BuildContext context, int index) {
return SizedBox(height: 10);
},
shrinkWrap: true,
itemCount: null == _continent ? 0 : _continent.length,
itemBuilder: (context, index) {
return Column(mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[
Row(mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: <Widget>[
Expanded(flex: 1, child: Text(_continent[index].continent)),
Expanded(
flex: 2,
child: Container(
height: 50,
child: ListView.separated(
separatorBuilder: (BuildContext context, int index) {
return SizedBox(width: 10);
},
shrinkWrap: true,
scrollDirection: Axis.horizontal,
itemCount: null == _continent ? 0 : _continent[index].country.length,
itemBuilder: (context, countryIndex) {
print(_continent[index].country[countryIndex].name);
return Row(mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[
Container(
width: 100,
child: Column(children: <Widget>[
Text(
_continent[index].country[countryIndex].name,
),
Text(_continent[index].country[countryIndex].capital,
style: TextStyle(
color: Colors.blue,
)),
]))
]);
})))
])
]);
}));
}
}
最佳答案
import 'dart:math'; //useful to check the longest list of countries
class ContinentPage2 extends StatefulWidget {
ContinentPage2() : super();
@override
_ContinentPageState createState() => _ContinentPageState();
}
class _ContinentPageState extends State<ContinentPage2> {
List<Continent> _continent = []; //initialize empty to avoid problem with the table
int maxLength; //we need to check for the longest list of countries in all the continents
@override
void initState() {
super.initState();
ContinentServices.getContinent().then((continents) {
setState(() {
_continent = continents;
maxLength = _continent.map((continent) => continent.country.length).reduce(max);
/*max uses dart:math, I made a list of the length of all the List<countries>
and then check for the list with the maximum length*/
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('')),
body: SingleChildScrollView(
child: Table(
defaultVerticalAlignment: TableCellVerticalAlignment.middle,
columnWidths: {0: FlexColumnWidth(0.5)}, //accept a map and gives to the index the width I want, in this case the first widget a flex of 0.5, and the others will have the default 1, so it's the same as using expanded with flex: 1 and then flex: 2
children: [
for (Continent continent in _continent)
TableRow(children: [
TableCell(
verticalAlignment: TableCellVerticalAlignment.middle,
child: Text(continent.continent),
),
for (Country country in continent.country)
Padding(
padding: const EdgeInsets.symmetric(vertical: 5),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Flexible(
child: FittedBox(
fit: BoxFit.scaleDown,
child: Text(country.name),
),
),
Flexible(
child: FittedBox(
fit: BoxFit.scaleDown,
child: Text(
country.capital,
style: TextStyle(
color: Colors.blue,
),
textAlign: TextAlign.center,
)),
),
//OPTION 1 create a String with all the languages as a single text
if(country.languages.isNotempty)
Flexible(
child: MyLanguages(
lang: country.languages.reduce((prev, curr) => '$prev, $curr')
)
),
// Option 2 using a for to create multiple text widgets inside the column widget with all the languages per country
if(country.languages.isNotempty)
for(String language in country.language)
Flexible(
child: Text(language)
)
]),
),
if (continent.country.length < maxLength)
for (int i = 0; i < maxLength - continent.country.length; i++)
const SizedBox()
])
],
)));
}
}
// Used in Option 1
class MyLanguages extends StatelessWidget{
final String languages;
MyLanguages({String lang, Key key}) : languages = lang.replaceFirst(',', ' and', lang.lastIndexOf(',').clamp(0, double.infinity)), super(key: key);
@override
Widget build(BuildContext context){
return Text(languages);
}
}
maxLength = _continent.map((continent) => continent.country.length).reduce(max);
if (continent.country.length < maxLength)
for (int i = 0; i < maxLength - continent.country.length; i++)
const SizedBox()
columnWidths: {0: FlexColumnWidth(0.5)},
Text(
country.capital,
style: TextStyle(color: Colors.blue),
textAlign: TextAlign.center,
maxLines: 2, softWrap: true,
)
关于listview - Flutter:如何根据Expanded和itemCount自动调整ListView中的高度,宽度,字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62207592/
我有一个简单的 Card 组件,是从material-ui 的网站复制的。 我正在尝试在我的代码中实现它。当我单击 CardHeader 时,它不会展开。 这是我的组件: import React,
我已经使用延迟加载实现了一棵树。第一级节点是在树创建时创建的,其中只有当用户展开任何特定节点时才会创建子节点。 数据来自数据库,我们向数据库发出查询以填充子节点。实现了 TreeExpansionLi
假设我有 3 个向量(仅作为示例)。现在我想获取这 3 个所有可能组合的随机样本。通常,我会这样做: x <- 1:3 y <- 10:12 z <- 15:18 N <- length(x) * l
如果我使用 dabbrev-expand为了扩展,Emacs 搜索当前缓冲区,然后搜索其他具有相同模式的缓冲区。这是由 dabbrev-friend-buffer-function 处理的默认设置为
我想像这样切片主窗口 我的布局代码如下: QGridLayout *gLayout = new QGridLayout (); viewWidget->setStyleSheet("backgroun
我在 Android Studio Canary 1 上尝试 Jetpack Compose 并添加了 Column可组合到 ui。 Column有一个名为 modifier 的属性我们可以在其中传递
我正在努力让我们的 Accordion 可以使用 aria-expanded 等 aria 标签来访问。当单击 Accordion 触发器标题或按下键盘上的“返回”按钮时,我正确地更改了 aria-e
根据 http://doc.qt.io/qt-5/qsizepolicy.html#Policy-enum ,设置小部件的大小策略具有以下效果: The sizeHint() is a sensibl
我将使用Live Actitions显示实时数据,并在一个应用程序中添加对Dynamic Island的支持,该应用程序具有现有的小部件扩展。然而,我也不能把它造出来。当我收到错误信息时。和。即使我提
我有一个设置,如下所示: //With dynamic content here. 我正在运行一个脚本,该脚本将 #nav 的大小调整为浏览器窗口的高度大小。但有时我的
我正在使用jquery checkboxtree plugin它效果很好,并且上面的链接中有很好的文档和示例。我现在遇到一种情况,我想以编程方式检查节点。使用以下语法支持此操作: $('#tabs-
我正在尝试以下实验: 我有两个QpushButtons,比如PushA 和PushB。现在 PushA 在 QHBoxLayout 中,PushB 也在它自己的 QHBoxLayout 中。这两个水平
我目前有一个 OData V4 服务,它具有以下模型。 “类别”——“代码” 对于每个类别,可以有许多代码。 我需要 $expand the Codes, $filter where Active =
我的目的是创建一个带有 QVBoxLayout 的可滚动控件,上面有各种控件(比如按钮)。该控件放在 *.ui 窗体上。在该控件的构造函数中,我编写了以下代码: MyScrollArea::M
你们如何解决以下 Flutter 布局? 我有一个屏幕,我必须在其中显示,如图所示:一个 Logo + 3 个 TextFormFields + 2 个按钮 + 一个容器。 问题: 我需要将所有小部件
我使用最新版本的 mvvm light 工具包,但是我不清楚如何将 EventToCommand 用于事件 TreeViewItem.Expanded。 这很有效......我做错了什么?
我是 LINQ 的新手。 我有以下查询,我不知道它代表什么。 var query = (from p in data.First
这里有一个小问题。我有一个表,当我想单击运行时,该表应该展开,而且同一行中有一个展开按钮,它也应该展开一个 div。 问题:当我单击该行时,一切正常,div 将滑入。当我单击按钮(位于表行中)时,会产
图片:
我的应用程序中有 Expander 设置 FlowDirection 正常工作,但标题文本显示在水平方向。我想显示标题文本垂直绘制。 最佳答案 使用 sl 工具包中的 LayoutTransforme
我是一名优秀的程序员,十分优秀!