吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 524|回复: 8
收起左侧

[求助] flutter初始化列表的时候

[复制链接]
ligy 发表于 2023-11-17 18:13
[list=1]flutter初始化列表的时候,不给默认值报错,求flutter大佬救救萌新!!
[/list]
import 'package:flutter/material.dart';
main() {
  runApp(const MyDemo());
}
class MyDemo extends StatelessWidget {
  const MyDemo({super.key});
  @override
  Widget build(BuildContext context) {
    return  MaterialApp(home: (
      Scaffold(
        appBar: AppBar(
          title:const Text('异步操作')
        ),
        // body: SafeArea(child: HomeBody()),
        body: const HomeBody(),
      )
    ));
  }
}
class HomeBody extends StatefulWidget {
  const HomeBody({super.key});
  @override
  State<HomeBody> createState() => _HomeBodyState();
}
class _HomeBodyState extends State<HomeBody> {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    return StarRate(score: 9,activeImage: const Icon(Icons.heart_broken));
  }
}
class StarRate extends StatefulWidget {
  final double score;
  final double maxScore;
  final int starCount;
  final double starSize;
  final Color activeColor;
  final Color defaultColor;
  final Widget defaultImage;
  final Widget activeImage;
  StarRate({
    required this.score,
    this.maxScore =  10,
    this.starCount = 6,
    this.starSize = 32,
    this.activeColor = Colors.red,
    this.defaultColor = const Color.fromRGBO(0, 0, 0, 0.3),
    Widget defaultImage,
    Widget activeImage
  }) :defaultImage = defaultImage ?? Icon(Icons.star_border,color:defaultColor,size: starSize),
      activeImage = activeImage ?? Icon(Icons.star,color: activeColor,size: starSize);
  @override
  State<StarRate> createState() => _StarRateState();
}

class _StarRateState extends State<StarRate> {
  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Row(
          children: List.generate(widget.starCount, (index){
            return widget.defaultImage;
          })
        ),
        Row(
          children: buildSelectedStar())
      ],
    );
  }
  List<Widget>buildSelectedStar(){
    // 1.创建stars
    List<Widget> stars = [];
    // 2.构建填充的star
    double oneValue = widget.maxScore / widget.starCount;
    int entireStar = (widget.score / oneValue).floor();
    final star = widget.activeImage;
    for(var i = 0; i<entireStar;i++){
      stars.add(star);
    }
    // 3.填充部分star
    double leftWidth = ((widget.score/oneValue) - entireStar) * widget.starSize;
    final sectionStar = ClipRect(
      clipper: StarClip(leftWidth),
      child: star
    );
    stars.add(sectionStar);
    return stars;
  }
}

class StarClip extends CustomClipper<Rect>{
  double width;
  StarClip(this.width);
  @override
  Rect getClip(Size size) {
    return Rect.fromLTRB(0, 0, width, size.height);
  }
  @override
  bool shouldReclip(StarClip oldClipper) {
    return oldClipper.width != width;
  }
}

免费评分

参与人数 1热心值 +1 收起 理由
fcml45 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

iocz 发表于 2023-11-17 19:00
既然是final,后面就不可能再赋值,你不在初始化列表里初始化,那它只能是空值了,要声明成可空类型
 楼主| ligy 发表于 2023-11-17 19:41
iocz 发表于 2023-11-17 19:00
既然是final,后面就不可能再赋值,你不在初始化列表里初始化,那它只能是空值了,要声明成可空类型

有在初始化的时候给判断的:defaultImage = defaultImage ?? Icon(Icons.star_border,color:defaultColor,size: starSize)
iocz 发表于 2023-11-17 19:47
ligy 发表于 2023-11-17 19:41
有在初始化的时候给判断的:defaultImage = defaultImage ?? Icon(Icons.star_border,color:defaultColor ...

那构造函数的参数得是可空的Widget? defaultImage
 楼主| ligy 发表于 2023-11-17 21:00
iocz 发表于 2023-11-17 19:47
那构造函数的参数得是可空的Widget? defaultImage

大佬厉害,蟹蟹蟹蟹!
米饭大师 发表于 2023-11-17 21:01
要么可空,要么加late
 楼主| ligy 发表于 2023-11-17 21:02
米饭大师 发表于 2023-11-17 21:01
要么可空,要么加late

加个?就行了哈哈,新手上路,
米饭大师 发表于 2023-11-17 21:03
ligy 发表于 2023-11-17 21:02
加个?就行了哈哈,新手上路,

是的 我也是刚看了flutter的基础视频没两天
dusk1004 发表于 2023-11-28 14:53
大佬们,有没有最新的 flutter v3.0的视频
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表