今天是2023年4月24日
今天重新复习了一下关于ListView的内容,现在就重新整理一下关于ListView的内容和理解
:
(1)ListView和Column之间有什么区别?
在我理解中ListView和Column都是可以有很多子组件的组件,它们之间区别在于它们排列的形式和
是否可以滑动:
[1].ListView:ListView是一个本身就支持滑动的组件,且排列方式可以是垂直也可以是水平。它的子组件通常是通过一个数据源(如数组)来生成的,每个子组件都是相互独立的。
[2].Column:Column是一个本身并不支持滑动的组件(在不使用其他组件的前提下),排列只能是垂直排列,它的子组件是一个有序的列表,每个子组件都是相对于父组件的位置来确定的。
(2)提供一个ListView的例子并且使用到ListTile和Divide
import 'package:flutter/material.dart';
//这里使用一个比较简单的例子完成
void main() => runApp(
MaterialApp(
home: Scaffold(
body: ListView(
children: [
ListTile(
leading: Text("文本"),
title: Text("文本1"),
subtitle: Text("文本2"),
trailing: Text("文本3"),
),
Divider(
color: Colors.blue,
thickness: 2, //线的宽度
indent: 12, //前面的边距
endIndent: 12, //后面的边距
height: 20, //调整位置
),
],
),
),
),
);
运行效果为:
(3)图文列表,一张图片一段文本(一次类推)
import 'package:flutter/material.dart';
void main() => runApp(
MaterialApp(
home: Scaffold(
body: ListView(
//这里采用的是ListView中使用for循环来完成渲染内容的操作
children: [
for (var a = 0; a < 10; a++)
Column(
children: [
SizedBox(
width: 200,
height: 400,
child: Image.network(
"https://tse1-mm.cn.bing.net/th/id/OIP-C.SetpVlIiIa4eLD4cQxHuvAHaNK?pid=ImgDet&w=1080&h=1920&rs=1",
fit: BoxFit.fitHeight,
),
),
Text("这是一张网络图片")
],
),
],
),
),
),
);
效果图:
(4)常量构造函数能不能加函数体?
class Person {
const Person() {}//报红
}
常量函数是不能添加函数体的,因为常量函数成员不可变,如果你加了函数体,则说明有可能改变成员值,
这是不被认可的操作,所以实际上如果你给常量构造函数添加函数体,会出现提示:
Const constructors can't have a body.
构造函数不能有主体
(5)使用一下ListView中的builder
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: Scaffold(
body: ListView.builder(
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
//然后这里提一下几乎人人都知道的内容,如果在ListView中的你给子组件的大小
//不管用可以看看是否给它添加了位置组件,
return Center(
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
color: Colors.black),
width: 100,
height: 100,
),
);
},
),
),
));
运行效果
(6)什么情况下,会提示要给成员变量加一个late? 为什么要建议加上late,是哪一个规则决定的?
在使用Dart编程语言时,如果成员变量在声明时没有被初始化,而且在构造函数中也没有被赋值,那么编译器会提示将该变量声明为late。
建议加上late是为了避免在访问该变量之前出现空指针异常。这是因为Dart在运行时要求所有变量必须被初始化,否则编译器会在编译时报错。
将变量声明为late后,编译器会在运行时进行检查,如果变量没有被初始化,则会抛出一个异常。
这个规则是在Dart语言规范中定义的。在Dart中,late是一个关键字,用于声明成员变量为“延迟初始化”。