自定义组件的情况下, 如果组件是继承 StatelessWidget ,那么该组件内就不应该有可变的属性,例如:
import 'package:flutter/material.dart';
import 'data/newList.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Welcome to Flutter'),
),
body: HomeContent(),
),
theme: ThemeData(
primaryColor: Colors.pink,
),
);
}
}
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(
children: [
IconWidget(Icons.home_filled, color: Colors.pink, size: 30),
IconWidget(Icons.search_off, color: Colors.blue, size: 30),
IconWidget(Icons.access_alarm, color: Colors.redAccent, size: 30),
],
);
}
}
class IconWidget extends StatelessWidget {
IconWidget(this.icon, {this.color = Colors.white70, this.size = 32});
// 下面属性不应该在这里初始化, 而是在构造函数内设置默认的值,并且要 使用 final 关键字防止它改变, 否则会报警告
final double size;
final IconData icon;
final Color color;
/*
// 这种写法会报警告: This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final
double size = 32;
IconData icon;
Color color = Colors.white70 ;
IconWidget(this.icon, {this.color , this.size});
*/
@override
Widget build(BuildContext context) {
return Container(
color: this.color,
width: 100,
height: 100,
child: Center(
child: Icon(this.icon, size: this.size, color: Colors.black),
),
);
}
}