android - Flutter 中类型 'Color' 不是类型 'MaterialColor' 错误的子类型?

标签 android flutter dart flutter-dependencies flutter-test

**> ══╡ 小部件库捕获异常

╞═══════════════════════════════════════════════════════════ The following _TypeError was thrown building Builder: type 'Color' is not a subtype of type 'MaterialColor'

The relevant error-causing widget was: MaterialApp file:///D:/FlutterExercise/FlutterExercise/07/spanishaudioplayer/lib/main.dart:9:12

When the exception was thrown, this was the stack: #0 new _HomePageState (package:spanishaudioplayer/HomePage.dart:22:35) #1 HomePage.createState (package:spanishaudioplayer/HomePage.dart:7:35) #2 new StatefulElement (package:flutter/src/widgets/framework.dart:4584:24) #3 StatefulWidget.createElement (package:flutter/src/widgets/framework.dart:916:38) ... Normal element mounting (166 frames) #169 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3541:14) #170 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6094:32) ... Normal element mounting (300 frames) #470 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3541:14) #471 Element.updateChild (package:flutter/src/widgets/framework.dart:3306:18) #472 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1182:16) #473 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1153:5) #474 RenderObjectToWidgetAdapter.attachToRenderTree. (package:flutter/src/widgets/binding.dart:1095:18) #475 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2647:19) #476 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1094:13) #477 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:934:7) #478 WidgetsBinding.scheduleAttachRootWidget. (package:flutter/src/widgets/binding.dart:915:7) (elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)

════════════════════════════════════════════════════════════════════════════════════════════════════ W/InputMethodManager(14486): startInputReason = 8 W/IInputConnectionWrapper(14486): getExtractedText on inactive InputConnection W/IInputConnectionWrapper(14486): getTextBeforeCursor on inactive InputConnection V/ActivityThread(14486): Finishing stop of ActivityRecord{801579c token=android.os.BinderProxy@63e470c {com.example.spanishaudioplayer/com.example.spanishaudioplayer.MainActivity}} W/libEGL (14486): EGLNativeWindowType 0x76efee7010 disconnect failed W/libEGL (14486): EGLNativeWindowType 0x7713667010 disconnect failed V/ActivityThread(14486): Handle window ActivityRecord{801579c token=android.os.BinderProxy@63e470c {com.example.spanishaudioplayer/com.example.spanishaudioplayer.MainActivity}} visibility: false**

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //main.dart

import 'package:flutter/material.dart';
import 'HomePage.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
      return MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Spanish Audio Numbers',
        theme: ThemeData(
          primarySwatch: Colors.teal,
        ),
        home: HomePage(),
      );
    }
  }

/////////////////////////////////////////////////////////////////////////////////////////////////////
//HomePage.dart

import 'package:flutter/material.dart';
import 'package:audioplayers/audio_cache.dart';
import 'NumberAudio.dart';

class HomePage extends StatefulWidget {
    @override
    _HomePageState createState() => _HomePageState();
  }

class _HomePageState extends State<HomePage> {
    AudioCache audioPlayer = AudioCache();
    List<NumberAudio> audioList = [
      NumberAudio("one.wav", Colors.red, "one"),
      NumberAudio("two.wav", Colors.blue, "two"),
      NumberAudio("three.wav", Colors.pink, "three"),
      NumberAudio("four.wav", Colors.orange, "four"),
      NumberAudio("five.wav", Colors.purple, "five"),
      NumberAudio("six.wav", Colors.cyan, "six"),
      NumberAudio("seven.wav", Colors.green, "seven"),
      NumberAudio("eight.wav", Colors.grey, "eight"),
      NumberAudio("nine.wav", Colors.yellow, "nine"),
      NumberAudio("ten.wav", Colors.black, "ten"),
    ];
    play(String audioFile) async {
      audioPlayer.play(audioFile);
    }

    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: Text(
            'Spanish Numbers',
            style: TextStyle(
              color: Colors.white,
              fontSize: 24.0,
              fontWeight: FontWeight.bold,
            ),
          ),
          //backgroundColor: Colors.teal,
        ),
        body: Center(
          child: Column(
            children: [
              Image(
                image: AssetImage("images/logo.png"),
              ),
              Expanded(
                child: GridView.builder(
                  padding: EdgeInsets.all(10.0),
                  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                    childAspectRatio: 1.0,
                    crossAxisCount: 2,
                    crossAxisSpacing: 5.0,
                    mainAxisSpacing: 5.0,
                  ),
                  itemCount: audioList.length,
                  itemBuilder: (context, index) => SizedBox(
                    height: 50.0,
                    width: 100.0,
                    child: RaisedButton(
                      child: Text(
                        audioList[index].buttonTitle,
                        style: TextStyle(
                          color: Colors.white,
                          fontSize: 24.0,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                      color: audioList[index].buttonColor,
                      onPressed: () {
                        play(audioList[index].audioFile);
                      },
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      );
    }
}

/////////////////////////////////////////////////////////////////////////////////////////////////////
//NumberAudio.dart

import 'package:flutter/material.dart';

class NumberAudio {
    String audioFile;
    MaterialColor buttonColor;
    String buttonTitle;
    NumberAudio(String audioFile, MaterialColor buttonColor, String buttonTitle) {
      this.audioFile = audioFile;
      this.buttonColor = buttonColor;
      this.buttonTitle = buttonTitle;
    }
}

/image/LGfKS.png

最佳答案

Color 不是 MaterialColor 的子类型。

theme: ThemeData(
  primarySwatch: Colors.teal,
),

此处 primarySwatch 的类型为 MaterialColor,但您输入的 Colors.teal 的类型为 Color

如果您想创建 MaterialColor 的实例,请尝试类似的操作:

   static const MaterialColor colorPrimarySwatch = const MaterialColor(
    0xFFFFFFFF,
    const <int, Color>{
      50: const Color(0xFFFFFFFF),
      100: const Color(0xFFFFFFFF),
      200: const Color(0xFFFFFFFF),
      300: const Color(0xFFFFFFFF),
      400: const Color(0xFFFFFFFF),
      500: const Color(0xFFFFFFFF),
      600: const Color(0xFFFFFFFF),
      700: const Color(0xFFFFFFFF),
      800: const Color(0xFFFFFFFF),
      900: const Color(0xFFFFFFFF),
    },
  );

不要忘记将 buttonColor 类型从 MaterialColor 更改为 Color

class NumberAudio {
    String audioFile;
    Color buttonColor;
    String buttonTitle;

    NumberAudio(String audioFile, Color buttonColor, String buttonTitle) {
      this.audioFile = audioFile;
      this.buttonColor = buttonColor;
      this.buttonTitle = buttonTitle;
    }
}

关于android - Flutter 中类型 'Color' 不是类型 'MaterialColor' 错误的子类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67159516/

相关文章:

android - 使用 PendingIntent 开始新 Activity 时的混淆行为

java - 按锁定按钮时声音停止

Flutter 2.0 - 自动完成小部件从右侧退出屏幕

flutter - 更改本周第一天的日期时间格式

dart - 如何在 Dart 代码中创建 Dart Polymer 自定义元素的实例?

google-maps - 谷歌地图标记聚类为 flutter ?

android - 如何跟踪全景图中每一帧的相机运动 (OpenCV//Android)

android - Robolectric:如何测试内部使用应用程序实例的类?

swift - Flutter Desktop : Firebase Auth could not find a valid GoogleService-Info. plist

linux - Dart 在 Linux 上抛出错误 : GLIBC_2. 14 GLIBC_2.15 未找到