代码之家  ›  专栏  ›  技术社区  ›  Ruama

断言失败:第464行位置12:“needsComposing”:不为true。如何解决这个问题?

  •  0
  • Ruama  · 技术社区  · 1 年前

    我激动不已。我想在应用程序中插入音频播放,但它不起作用。我正在使用图书馆 “assets_audio_layer:^3.1.1” 因为我的课 '无状态小工具' 。我认为错误的原因是 柔性空格键 小部件,但我没有解决方案。当我运行此代码时,出现以下错误: '断言失败:第464行位置12:'needsCompositioning':不为true。"

    错误

    The following assertion was thrown during paint():
    'package:flutter/src/material/flexible_space_bar.dart': Failed assertion: line 464 pos 12: 'needsCompositing': is not true.
    
    
    Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
    In either case, please report this assertion by filing a bug on GitHub:
      https://github.com/flutter/flutter/issues/new?template=2_bug.yml
    
    The relevant error-causing widget was: 
      FlexibleSpaceBar FlexibleSpaceBar:file:///C:/Users/ruama.patricio/AndroidStudioProjects/shopping/lib/pages/course.page.dart:131:30
    When the exception was thrown, this was the stack: 
    #2      _RenderFlexibleSpaceHeaderOpacity.paint (package:flutter/src/material/flexible_space_bar.dart:464:12)
    #3      RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3155:7)
    #4      PaintingContext.paintChild (package:flutter/src/rendering/object.dart:252:13)
    #5      RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2875:15)
    #6      RenderStack.paintStack (package:flutter/src/rendering/stack.dart:639:5)
    #7      PaintingContext.pushClipRect.<anonymous closure> (package:flutter/src/rendering/object.dart:535:83)
    #8      ClipContext._clipAndPaint (package:flutter/src/painting/clip.dart:25:12)
    #9      ClipContext.clipRectAndPaint (package:flutter/src/painting/clip.dart:53:5)
    

    密码

    
    import 'package:flutter/material.dart';
    import 'package:provider/provider.dart';
    import 'package:assets_audio_player/assets_audio_player.dart';
    
    var url = 'https://www.kozco.com/tech/LRMonoPhase4.mp3';
    final audioo = AssetsAudioPlayer();
    
    playAudiofromAssets() {
      print("Played");
      audioo.open(
        Audio('assets/audios/ash.mp3'),
      );
      audioo.playOrPause();
    }
    
    playAudiofromInt() {
      print("p");
      audioo.open(Audio.network(url));
    }
    
    stopAudio() {
      audioo.pause();
    }
    
    
    
    class CheckboxProvider with ChangeNotifier {
      bool _isChecked = false;
    
      bool get isChecked => _isChecked;
    
      set isChecked(bool value) {
        _isChecked = value;
        notifyListeners();
      }
    }
    class CheckboxProviderAudio with ChangeNotifier {
      bool _isCheckedAudio = false;
    
      bool get isCheckedAudio => _isCheckedAudio;
    
      set isCheckedAudio(bool value) {
        _isCheckedAudio = value;
        notifyListeners();
      }
    }
    
    
    
    
    class CoursePage extends StatelessWidget {
      final String image;
      final String title;
      final String description;
      final String logo;
      final String details;
      final String company;
    
    
      CoursePage({
        required this. title,
        required this.description,
        required this.image,
        required this.logo,
        required this.details,
        required this.company,
      });
    
      @override
      Widget build(BuildContext context) {
    
    
    
        return Scaffold(
          body: NestedScrollView(
            headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled){
              return <Widget>[
                SliverAppBar(
                  leadingWidth: 400,
                  leading: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    mainAxisSize: MainAxisSize.max,
                    children: <Widget>[
    
                      Flexible(
    
                        child: Padding(
                          padding: const EdgeInsets.only(right:4),
                          child:  InkWell(
                            onTap: () {
                              Navigator.pop(context);
                            },
                            child: Ink.image(
                              image: AssetImage("assets/item-voltar.png"),
                              width: 40,
                              height: 40,
                              fit: BoxFit.fill,
                            ),
                          ),
                        ),
                      ),
    
                      Spacer(),
    
    
                     Flexible(
                        child: Padding(
                          padding: const EdgeInsets.only(right: 0),
                          child:  InkWell(
                            onTap: () {
                           //   Navigator.pop(context);
                            },
                            child: Ink.image(
                              image: AssetImage("assets/component.png"),
                              width: 80,
                              height: 40,
                              fit: BoxFit.fill,
                            ),
                          ),
                        ),
                      ),
                    ],
                  ),
    
                  backgroundColor:  Colors.white.withOpacity(0),
                  elevation: 0.0,
                  expandedHeight: 500.0,
                  floating: false,
                  flexibleSpace: FlexibleSpaceBar(
                    centerTitle: true,
                    background: Hero(
                      tag: image,
                      child:  Image.asset(
                        image,
                        width: double.infinity,
                        fit: BoxFit.fitWidth,
                      ),
                    ),
                  ),
                ),
              ];
    
            },
            body:ListView(
              children: <Widget> [
              Row(
                children: [
                  SizedBox(
                    width: 10,
                  ),
                  Flexible(
                    child: Padding(
                      padding: const EdgeInsets.only(right: 0),
                      child:  InkWell(
                        onTap: () {
                          //   Navigator.pop(context);
                        },
                        child: Ink.image(
                          image: AssetImage("assets/item-compartilhar.png"),
                          width: 40,
                          height: 40,
                          fit: BoxFit.fill,
                        ),
                      ),
                    ),
                  ),
                  Padding(
                    padding: EdgeInsets.all(10),
                    child: Text(description,
                       style: TextStyle(
                        fontSize: 20,
                      ),),
                  ),
                 Text("                             Por: "),
                  Image.asset(logo, width: 50, height: 50,),
    
                ],
    
              ),
                Padding(
                    padding: EdgeInsets.only(
                        top: 10,
                        left: 10,
                        right: 10
                    ),
                    child: Text(
                      title,
                      style: TextStyle(
                        fontSize: 26,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                ),
    
                SizedBox(
                  height: 10,
                ),
                Row(
                  children: [
                    SizedBox(width: 10),
                    Icon(Icons.account_balance),
                    Padding(
                      padding: EdgeInsets.all(10),
                      child: Text(
                        company,
                      ),
                    ),
    
                  ],
                ),
    
    
                SizedBox(
                  height: 10,
                ),
                Padding(
                  padding: EdgeInsets.all(10),
                  child: Text(
                      "Sobre",
                    style: TextStyle(
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
                Padding(
                  padding: EdgeInsets.all(10),
                  child: Text(
                   details,
                  ),
                ),
    
    
          Row(children: [
            Flexible(
                  child: Column(
                      children: <Widget>[ description  == " Curso"
                  ? Row(
                    children: [
                      ChangeNotifierProvider(
                        create: (_) => CheckboxProvider(),
                        child: Consumer<CheckboxProvider>(
                          builder: (context, checkboxProvider, _) => Checkbox(
                            value: checkboxProvider.isChecked,
                            onChanged: (value) {
                              checkboxProvider.isChecked = value ?? true;
                            },
                          ),
                        ),
                      ),
    
                      Text(
                        "Fiz esse curso",
                        style: TextStyle(
                          fontWeight: FontWeight.bold,
                        ),
                      ),
    
    
    
                    ],
    
                  )
                    :Row(
                        children: [
                          ChangeNotifierProvider(
                            create: (_) => CheckboxProviderAudio(),
                            child: Consumer<CheckboxProviderAudio>(
                              builder: (context, checkboxProviderAudio, _) => Checkbox(
                                value: checkboxProviderAudio.isCheckedAudio,
                                onChanged: (value) {
                                  checkboxProviderAudio.isCheckedAudio = value ?? true;
                                },
                              ),
                            ),
                          ),
    
                          Text(
                            "Já ouvi esse tutorial",
                            style: TextStyle(
                              fontWeight: FontWeight.bold,
                            ),
                          ),
                        ],
                      )
                      ],
                )
                    ),
             ],
          ),
    
    
             Padding(
                 padding: EdgeInsets.all(10),
                  child: Column(
                      children: <Widget>[ description  == " Curso"
                      ?
                    Container(
                    height: 200,
                    width: 400,
                   /* decoration: BoxDecoration(
                     color: Theme.of(context).primaryColor,
                      borderRadius: BorderRadius.all(
                        Radius.circular(50),
                      ),
                    ),*/
                    margin: EdgeInsets.only(right: 20),
                    child: Column(
                      children: [
    
    
                        Flexible(child:  TextButton(
                        child: Row(
    
                          children: [
                            Icon(Icons.link, color: Colors.white,),
                            Text(
                              "Tenho Interesse",
                              textAlign: TextAlign.center,
                              style: Theme.of(context).textTheme.displayMedium,
                            ),
                          ],
                        ),
                        style:  const ButtonStyle(
                          backgroundColor: MaterialStatePropertyAll(Colors.cyan),
    
                        ),
                        onPressed: () => {},
                      ),
    
                      ),
    
    
    
    
    
                       Flexible(child:
                        TextButton(
                          child: Row(
    
                            children: [
                              Icon(Icons.calendar_month, color: Colors.white,),
                              Text(
                                "Adicionar ao calendário",
                                textAlign: TextAlign.center,
                                style: Theme.of(context).textTheme.displayMedium,
                              ),
                            ],
                          ),
                          style:  const ButtonStyle(
                            backgroundColor: MaterialStatePropertyAll(Colors.lightBlueAccent),
    
                          ),
                          onPressed: () => {},
                        ),
                        )
    
                       
                      ],
                    ),
    
                  )
                    : Text("Áudio Player"),
                Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: <Widget>[
                                     Column(
                                        mainAxisAlignment: MainAxisAlignment.center,
                                         mainAxisSize: MainAxisSize.min,
                                        children: <Widget>[
                                          Text(
                                            "PLAY AUDIO FROM ASSET",
                                            style: TextStyle(
                                                color: Colors.white,
                                                fontSize: 20,
                                                fontWeight: FontWeight.bold),
                                          ),
                                          Row(
                                            mainAxisAlignment: MainAxisAlignment.center,
                                            children: <Widget>[
    
    
                                              TextButton.icon(
                                                onPressed: playAudiofromAssets,
                                                style: TextButton.styleFrom(
                                                  foregroundColor: Colors.grey[100],
                                                ),
                                                icon: Icon(Icons.play_arrow),
                                                label: Text(""),
    
                                              ),
    
                                              Spacer(),
    
                                              TextButton.icon(
                                                onPressed: stopAudio,
                                                style: TextButton.styleFrom(
                                                  foregroundColor: Colors.grey[100],
                                                ),
                                                icon: Icon(Icons.pause),
                                                label: Text(""),
    
                                              ),
    
                                            ],
                                          ),
                                          Spacer(),
                                          Text(
                                            "PLAY AUDIO FROM INTERNET",
                                            style: TextStyle(
                                                color: Colors.white,
                                                fontSize: 20,
                                                fontWeight: FontWeight.bold),
                                          ),
                                          Row(
                                            mainAxisAlignment: MainAxisAlignment.center,
                                            crossAxisAlignment: CrossAxisAlignment.center,
                                            children: <Widget>[
                                              TextButton.icon(
                                                //onPressed:(){},
                                               onPressed: () async {
                                                  await audioo.open(Audio.network(url));
                                                },
                                                style: TextButton.styleFrom(
                                                  foregroundColor: Colors.grey[100],
                                                ),
                                                icon: Icon(Icons.play_arrow),
                                                label: Text(""),
                                              ),
    
                                            Spacer(),
                                              TextButton.icon(
                                                onPressed:stopAudio,
                                                style: TextButton.styleFrom(
                                                  foregroundColor: Colors.grey[100],
                                                ),
                                                icon: Icon(Icons.pause),
                                                label: Text(""),
                                              ),
    
                                            ],
                                          ),
                                        ],
                                      ),
    
                        ],
    
                        )
    
             ],
              ),
             ),
              ],
    
            ),
          ),
        );
      }
    }
    
    
    

    我想解决这个问题,或者找到一个新的解决方案,在我的应用程序中插入音频播放器

    0 回复  |  直到 1 年前
        1
  •  0
  •   andrewJames Ikram Bashir    1 年前

    我也遇到了同样的问题,我制定的解决方案是设置:

    backgroundColor: Colors.grey,
    

    在我做了一些调试以掌握情况后,我要求Gemini澄清,它回应道:

    确保“不透明度”设置正确:

    FlexibleSpaceBar依赖于合成层来获得某些不透明度效果。

    确保FlexibleSpaceBar的不透明度属性设置为介于0.0(完全透明)和1.0(完全不透明)之间的值。将其设置为null或忽略它可能会触发此错误。

    因此,不要将背景设置为透明(或等效)。