1.在 Flutter 中,如何实现成员的私有访问?
用下划线 _
前缀来标记成员为私有,只能在类内部访问。例如 _privateVariable
2.final
和 const
有什么区别?
final
修饰的成员只能被赋值一次;const
修饰的成员是编译时常量,在编译时就必须确定其值,并且其值不能改变。
const
变量必须在声明时初始化,而 final
可以在构造函数中初始化。
3.late
关键字的作用是什么?
late
用于延迟初始化的变量,必须是 final
或非空的。比如 late final int lateField
,可以在构造函数中再进行初始化。
4.var
和 dynamic
有什么不同?
var
声明的变量,类型由编译器自动推断;
dynamic
变量可以是任何类型,类型检查发生在运行时,变量的类型可以在运行期间更改。
5.factory
构造函数有什么特点?
factory
构造函数用于返回一个实例,可能不是新创建的对象。比如可以用于创建单例模式,或者根据不同条件返回不同类型的实例。
6.covariant
关键字在 Flutter 中有哪些用途?
covariant
用于方法参数时,表示子类中可以使用比父类更具体的类型;用于 mixin
声明时,指定 mixin
可以应用于哪些类型的类。
7.在 TextField
中,keyboardType
、obscureText
、onChanged
分别是什么作用?
keyboardType
:用于指定键盘类型,比如数字、字母、电话号码、邮箱、日期等多种方式,以提高输入效率。
obscureText
:表示是否需要隐藏输入内容,若为 true
,输入内容会使用圆点显示,常用于密码输入场景。
onChanged
:是输入值改变事件回调,通常用于实现双向绑定,当输入框内容发生变化时会触发该回调函数。
8.Text
组件中 textAlign
、softWrap
、overflow
这几个属性的作用是什么?
textAlign
:用于设置文本的对齐方式,可选值有 left
、start
、right
、end
、center
、justify
。
softWrap
:表示文本是否自动换行。
overflow
:用于处理文本超出显示范围的情况,clip
表示直接截取,fade
表示渐隐,ellipsis
表示显示省略号。
9.Future
? await?
Future
表示一个异步操作的结果,它可能在未来某个时间点完成。比如,当你进行网络请求、读取文件等耗时操作时,这些操作不会立即返回结果,而是返回一个 Future
对象。
await
关键字只能在 async
函数内部使用,它的作用是暂停当前函数的执行,直到 Future
完成(resolved),然后返回 Future
的结果。
import 'package:http/http.dart' as http;
Future<String> fetchData() async {
//await会暂停 fetchData 函数的执行,直到网络请求完成。一旦请求完成,await 会返回 http.get 操作的结果(也就是 Response 对象),并继续执行函数后续代码。
var response = await http.get(Uri.parse('https://example.com/api/data'));
if (response.statusCode == 200) {
return response.body;
} else {
throw Exception('Failed to load data');
}
}
import 'dart:io';
Future<String> readFile() async {
File file = File('example.txt');
//await 等待文件读取操作完成并获取读取到的字符串内容
String content = await file.readAsString();
return content;
}
多个异步任务相互依赖的情况,可以使用 Future
和 await
来顺序执行这些异步操作,保证逻辑的正确性。比如先进行一个网络请求获取用户 ID,然后根据这个 ID 再进行另一个网络请求获取用户详细信息
10.sealed
用于类声明,表明该类是密封类。密封类不能被继承,并且其所有的子类必须在与密封类相同的库中声明。这在实现有限状态机或者一些需要严格控制继承层次的场景中非常有用。
sealed class Shape {}
class Circle extends Shape {}
class Square extends Shape {}
11.with
用于混入(mixin),允许一个类复用其他类的功能。Mixin 是一种在多个类层次结构中复用代码的方式,它避免了多重继承的复杂性。
mixin Flyable {
void fly() {
print('I can fly');
}
}
class Bird with Flyable {}
// 使用
Bird bird = Bird();
bird.fly();
12.static
用于类成员(属性或方法),表示该成员属于类本身,而不是类的实例。静态成员可以通过类名直接访问,无需创建类的实例。在 Flutter 中,常用于工具类或者全局共享的常量等场景。
class MathUtils {
static int add(int a, int b) {
return a + b;
}
}
// 使用
int result = MathUtils.add(2, 3);