无法将参数类型“ ShowSnackBar”分配给参数“ SnackBar”

时间:2020-10-27 00:26:49

标签: flutter dart

我想重用我的SnackBar小部件,但出现此错误:

export PATH=$PATH:/opt/golang/go/bin:$HOME/go/bin

这是我的SnackBar显示代码

The argument type 'ShowSnackBar' can't be assigned to the parameter 'SnackBar'

这是我的代码的一部分,它使用flutter_bloc库和ShowSnacBar类。我在第4行遇到此错误

import 'package:flutter/material.dart';
class ShowSnackBar extends StatelessWidget{
  final dynamic state;

  const ShowSnackBar({this.state}) ;
  @override
  Widget build(BuildContext context) {
    // TODO: implement build

      return SnackBar(content: Text(state.message??'خطا رخ داد.',style: TextStyle(color: Colors.white),
      ),
        elevation: 4,
        backgroundColor: Colors.deepPurple,
        action: SnackBarAction(label: 'متوجه شدم', onPressed: (){
          print("ok");

        }),);
    }
  }

谢谢。

3 个答案:

答案 0 :(得分:0)

确保类ShowSnackBar实现如下的SnackBar

class BetterSnackBar extends StatelessWidget implements SnackBar {
  Widget build(BuildContext context) {
     // Tweak the build method for maximum customization
  }

  // rest of the class, you can just copy-paste it
  // from SnackBar, if you want to make sure you support
  // everything the original snack bar supports
}

有关here

的更多信息

此外,我会建议您使用一些可以为您提供更多自定义功能且不需要脚手架的软件包,例如this软件包。

答案 1 :(得分:0)

你可以这样做。

class CustomSnackAlert {
  static SnackBar showErrorSnackBar(String message) {
    return SnackBar(
      content: Text(message),
      backgroundColor: Colors.red[700],
      duration: Duration(seconds: 7),
    );
  }
  // ... another snackbar
}

ScaffoldMessenger.of(context)
 ..hideCurrentSnackBar()..showSnackBar(
 CustomSnackAlert.showErrorSnackBar(
 "Your error",
  ),
);

答案 2 :(得分:0)

我做得更简单了。由于只是一个小部件,您不需要所有这些东西:

SnackBar CustomSnackBar(message) => SnackBar(
      backgroundColor: colorBeige,
      content: Text(
        message,
        style: TextStyle(color: colorBlack),
      ),
    );

void showSnackBar(BuildContext context, String message) {
  ScaffoldMessenger.of(context).showSnackBar(
    CustomSnackBar(message),
  );
}

然后导入文件并像使用它一样简单:

showSnackBar(context, "hello");