我是flushbar小部件的新手。我构建了一个简单的代码示例,该示例代码导致了小部件上的一些文章和视频之后出现以下编译器错误。 https://pub.dev/packages/flushbar

大多数示例取决于onPressed click事件。就我而言,我需要在显示冲洗栏消息之前进行一些处理。

我尝试了两种版本:
刷新栏:^ 1.10.0
刷新栏:^ 1.9.1

您能否建议以下代码运行什么?

这是编译器错误:

正在运行Gradle任务'assembleDebug'...
编译器消息:
/C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flushbar-1.10.0/lib/flushbar_route.dart:303:8:错误:方法'FlushbarRoute.install'具有较少的位置参数而不是覆盖的方法“OverlayRoute.install”。
无效的install(){
^
/C:/src/flutter/packages/flutter/lib/src/widgets/routes.dart:41:8:上下文:这是被覆盖的方法(“安装”)。
无效安装(OverlayEntry insertPoint){
^
/C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flushbar-1.10.0/lib/flushbar_route.dart:311:18:错误:位置参数太少:需要1,给定0。
super.install();
^
目标kernel_snapshot失败:异常:创建快照时出错:null
构建失败。

失败:生成失败,发生异常。

  • 其中:
    脚本'C:\ src \ flutter \ packages \ flutter_tools \ gradle \ flutter.gradle'行:780
  • 出了什么问题:
    任务':app:compileFlutterBuildDebug'的执行失败。


  • 这是我的示例代码。语法没有错误,但编译失败。
    import 'package:flutter/material.dart';
    import 'package:flushbar/flushbar.dart';
    
    class MyHomePage extends StatefulWidget {
      MyHomePage();
    
      @override
      State<StatefulWidget> createState() {
        return _MyHomePage();
      }
    
    }
    class _MyHomePage extends State<MyHomePage> {
      int _selectedIndex = 2;
    
      @override
      void initState() {
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('Flushbar')),
          body: Center(
              child:
              BottomNavigationBar(
                items: <BottomNavigationBarItem>[
                  BottomNavigationBarItem(
                    icon: Icon(Icons.today),
                    title: Text('Today'), // Today button.
                  ),
                  BottomNavigationBarItem(
                    icon: Icon(Icons.business ),
                    title: Text('Activities'),  // Activities.
                  ),
                  BottomNavigationBarItem(
                    icon: Icon(Icons.save),
                    title: Text('Finish'), // Finish
                  ),
                ],
                currentIndex: _selectedIndex,
                selectedItemColor: Colors.amber[800],
                onTap: _onItemTapped,
              )
          ),
        );
      }
    
      void _onItemTapped(int index) {
        setState(() {
          switch (index) {
            case 0:           // Today selected.
    //          todayButtonPressed();
              break;
            case 1:           // Activity selected.
    //          activityButtonPressed();
              break;
            case 2:           // Finish selected.
              finishButtonPressed();
              break;
          }
        });
      }
    
      void finishButtonPressed() async {
        // Processing record.
        // .....
        // ....
        displayFlushBar(context);
      }
    
      void displayFlushBar(BuildContext context) {
        Flushbar(
          title: 'Action',
          message: 'Is prohibited',
          icon: Icon(
            Icons.info_outline,
            size: 28,
            color: Colors.blue.shade300,
          ),
          leftBarIndicatorColor: Colors.blue.shade300,
          duration: Duration(seconds: 3),
        )..show(context);
      }
    }
    

    最佳答案

    Flutter发生了变化,因为覆盖是在Beta/Dev/Master版本中组成的,并且Flushbar受到了影响。我相信他们已经更新到测试版,并且稳定的人都会遇到错误。您可以选择使用带有路径的fork库(如chunhunghan所建议),或迁移到另一个插件。
    如果选择第二个选项,我建议您使用Get,因为除了拥有Flushbar的所有功能之外,您仍然可以在路线之间导航,打开对话框而无需使用上下文。在您的示例中,您需要按参数发送上下文,而使用Get则没有必要。

    class MyHomePage extends StatefulWidget {
      MyHomePage();
    
      @override
      State<StatefulWidget> createState() {
        return _MyHomePage();
      }
    
    }
    class _MyHomePage extends State<MyHomePage> {
      int _selectedIndex = 2;
    
      @override
      void initState() {
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('Flushbar')),
          body: Center(
              child:
              BottomNavigationBar(
                items: <BottomNavigationBarItem>[
                  BottomNavigationBarItem(
                    icon: Icon(Icons.today),
                    title: Text('Today'), // Today button.
                  ),
                  BottomNavigationBarItem(
                    icon: Icon(Icons.business ),
                    title: Text('Activities'),  // Activities.
                  ),
                  BottomNavigationBarItem(
                    icon: Icon(Icons.save),
                    title: Text('Finish'), // Finish
                  ),
                ],
                currentIndex: _selectedIndex,
                selectedItemColor: Colors.amber[800],
                onTap: _onItemTapped,
              )
          ),
        );
      }
    
      void _onItemTapped(int index) {
        setState(() {
          switch (index) {
            case 0:           // Today selected.
    //          todayButtonPressed();
              break;
            case 1:           // Activity selected.
    //          activityButtonPressed();
              break;
            case 2:           // Finish selected.
              finishButtonPressed();
              break;
          }
        });
      }
    
      void finishButtonPressed() async {
        // Processing record.
        // .....
        // ....
        displayFlushBar();
      }
    
      void displayFlushBar() { // GET DONT NEED CONTEXT
        Get.snackbar(
          'Action',
          'Is prohibited',
          icon: Icon(
            Icons.info_outline,
            size: 28,
            color: Colors.blue.shade300,
          ),
          leftBarIndicatorColor: Colors.blue.shade300,
          duration: Duration(seconds: 3),
        ); // GET DONT NEED SHOW METHOD
      }
    }
    

    lib https://pub.dev/packages/get的链接

    关于flutter - Flushbar编译器问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61355018/

    10-09 05:29