自定义组件的情况下, 如果组件是继承 StatelessWidget ,那么该组件内就不应该有可变的属性,例如:

    1. import 'package:flutter/material.dart';
    2. import 'data/newList.dart';
    3. void main() => runApp(MyApp());
    4. class MyApp extends StatelessWidget {
    5. @override
    6. Widget build(BuildContext context) {
    7. return MaterialApp(
    8. home: Scaffold(
    9. appBar: AppBar(
    10. title: Text('Welcome to Flutter'),
    11. ),
    12. body: HomeContent(),
    13. ),
    14. theme: ThemeData(
    15. primaryColor: Colors.pink,
    16. ),
    17. );
    18. }
    19. }
    20. class HomeContent extends StatelessWidget {
    21. @override
    22. Widget build(BuildContext context) {
    23. return Row(
    24. children: [
    25. IconWidget(Icons.home_filled, color: Colors.pink, size: 30),
    26. IconWidget(Icons.search_off, color: Colors.blue, size: 30),
    27. IconWidget(Icons.access_alarm, color: Colors.redAccent, size: 30),
    28. ],
    29. );
    30. }
    31. }
    32. class IconWidget extends StatelessWidget {
    33. IconWidget(this.icon, {this.color = Colors.white70, this.size = 32});
    34. // 下面属性不应该在这里初始化, 而是在构造函数内设置默认的值,并且要 使用 final 关键字防止它改变, 否则会报警告
    35. final double size;
    36. final IconData icon;
    37. final Color color;
    38. /*
    39. // 这种写法会报警告: 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
    40. double size = 32;
    41. IconData icon;
    42. Color color = Colors.white70 ;
    43. IconWidget(this.icon, {this.color , this.size});
    44. */
    45. @override
    46. Widget build(BuildContext context) {
    47. return Container(
    48. color: this.color,
    49. width: 100,
    50. height: 100,
    51. child: Center(
    52. child: Icon(this.icon, size: this.size, color: Colors.black),
    53. ),
    54. );
    55. }
    56. }