美文网首页
Flutter页面跳转报错There are multiple

Flutter页面跳转报错There are multiple

作者: Lost_Robot | 来源:发表于2020-08-19 17:24 被阅读0次
    import 'package:flutter/material.dart';
    
    import 'Page/NewRoute.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: 'Home'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      int _counter = 0;
    
      void _incrementCounter() {
        setState(() {
          _counter++;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  'You have pushed the button this many times:',
                ),
                Text(
                  '$_counter',
                  style: Theme.of(context).textTheme.display1,
                ),
                FlatButton(
                  child: Text("open new route"),
                  textColor: Colors.blue,
                  onPressed: () {
                    //导航到新路由
                    Navigator.push(context, MaterialPageRoute(builder: (context) {
                      return NewRoute();
                    }));
                  },
                ),
              ],
            ),
          ),
          floatingActionButton: Column(
            mainAxisAlignment: MainAxisAlignment.end,
            children: <Widget>[
              FloatingActionButton(
                onPressed: _incrementCounter,
                tooltip: 'Increment',
                foregroundColor: Colors.white,
                backgroundColor: Colors.cyan,
                child: Icon(Icons.exposure_plus_1),
              ),
            ],
          ), // This trailing comma makes auto-formatting nicer for build methods.
        );
      }
    }
    
    

    点击按钮跳转页面就报错

      FlatButton(
                  child: Text("open new route"),
                  textColor: Colors.blue,
                  onPressed: () {
                    //导航到新路由
                    Navigator.push(context, MaterialPageRoute(builder: (context) {
                      return NewRoute();
                    }));
                  },
                ),
    

    报错内容:

    
    ════════ Exception caught by scheduler library ═════════════════════════════════════════════════════
    The following assertion was thrown during a scheduler callback:
    There are multiple heroes that share the same tag within a subtree.
    
    Within each subtree for which heroes are to be animated (i.e. a PageRoute subtree), each Hero must have a unique non-null tag.
    In this case, multiple heroes had the following tag: <default FloatingActionButton tag>
    Here is the subtree for one of the offending heroes:
    # Hero(tag: <default FloatingActionButton tag>, state: _HeroState#5a900)
    # └SizedBox(renderObject: RenderConstrainedBox#e0670 relayoutBoundary=up6)
    #  └Offstage(offstage: false, renderObject: RenderOffstage#d8aa1 relayoutBoundary=up7)
    #   └TickerMode(mode: enabled)
    #    └KeyedSubtree-[GlobalKey#2e7b4]
    #     └Tooltip("decrement", dependencies: [_LocalizationsScope-[GlobalKey#624f7], _InheritedTheme, TickerMode], state: _TooltipState#50e7f(ticker inactive))
    #      └GestureDetector(startBehavior: start)
    #       └RawGestureDetector(state: RawGestureDetectorState#d9c12(gestures: [long press], excludeFromSemantics: true, behavior: opaque))
    #        └Listener
    #         └_PointerListener(listeners: [down], behavior: opaque, renderObject: RenderPointerListener#4ab1e relayoutBoundary=up8)
    #          └Semantics(container: false, properties: SemanticsProperties, label: "decrement", value: null, hint: null, hintOverrides: null, dependencies: [Directionality], renderObject: RenderSemanticsAnnotations#71fff relayoutBoundary=up9)
    #           └RawMaterialButton(state: _RawMaterialButtonState#72b4c)
    #            └Semantics(container: true, properties: SemanticsProperties, label: null, value: null, hint: null, hintOverrides: null, renderObject: RenderSemanticsAnnotations#e5b8d relayoutBoundary=up10)
    #             └_InputPadding(renderObject: _RenderInputPadding#ea3bd relayoutBoundary=up11)
    #              └Focus(dependencies: [_FocusMarker], state: _FocusState#2ef17)
    #               └_FocusMarker
    #                └ConstrainedBox(BoxConstraints(w=56.0, h=56.0), renderObject: RenderConstrainedBox#953c3 relayoutBoundary=up12)
    #                 └Material(type: button, elevation: 6.0, color: MaterialColor(primary value: Color(0xffff9800)), textStyle.debugLabel: (((englishLike button 2014).merge(whiteMountainView button)).copyWith).copyWith, textStyle.inherit: false, textStyle.color: Color(0xffffffff), textStyle.family: Roboto, textStyle.size: 14.0, textStyle.weight: 500, textStyle.letterSpacing: 1.2, textStyle.baseline: alphabetic, textStyle.decoration: TextDecoration.none, shape: CircleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none)), dependencies: [_LocalizationsScope-[GlobalKey#624f7], _InheritedTheme, TickerMode], state: _MaterialState#f3e54)
    #                  └_MaterialInterior(duration: 200ms, shape: CircleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none)), elevation: 6.0, color: MaterialColor(primary value: Color(0xffff9800)), shadowColor: Color(0xff000000), dependencies: [_LocalizationsScope-[GlobalKey#624f7], Directionality, _InheritedTheme, TickerMode], state: _MaterialInteriorState#82dfe(ticker inactive))
    #                   └PhysicalShape(clipper: ShapeBorderClipper, elevation: 6.0, color: MaterialColor(primary value: Color(0xffff9800)), shadowColor: Color(0xff000000), renderObject: RenderPhysicalShape#f96ad)
    #                    └_ShapeBorderPaint(dependencies: [Directionality])
    #                     └CustomPaint(renderObject: RenderCustomPaint#22c85)
    #                      └NotificationListener<LayoutChangedNotification>
    #                       └_InkFeatures-[GlobalKey#f58ae ink renderer](renderObject: _RenderInkFeatures#10c41)
    #                        └AnimatedDefaultTextStyle(duration: 200ms, debugLabel: (((englishLike button 2014).merge(whiteMountainView button)).copyWith).copyWith, inherit: false, color: Color(0xffffffff), family: Roboto, size: 14.0, weight: 500, letterSpacing: 1.2, baseline: alphabetic, decoration: TextDecoration.none, softWrap: wrapping at box width, overflow: clip, dependencies: [TickerMode], state: _AnimatedDefaultTextStyleState#07526(ticker inactive))
    #                         └DefaultTextStyle(debugLabel: (((englishLike button 2014).merge(whiteMountainView button)).copyWith).copyWith, inherit: false, color: Color(0xffffffff), family: Roboto, size: 14.0, weight: 500, letterSpacing: 1.2, baseline: alphabetic, decoration: TextDecoration.none, softWrap: wrapping at box width, overflow: clip)
    #                          └InkWell(gestures: [tap], clipped to BoxShape.rectangle, dependencies: [_FocusMarker], state: _InkResponseState<InkResponse>#2fd92)
    #                           └MouseRegion(listeners: [enter, exit], renderObject: RenderMouseRegion#e52ee)
    #                            └GestureDetector(startBehavior: start)
    #                             └RawGestureDetector(state: RawGestureDetectorState#d53b3(gestures: [tap], behavior: opaque))
    #                              └_GestureSemantics(renderObject: RenderSemanticsGestureHandler#94515)
    #                               └Listener
    #                                └_PointerListener(listeners: [down], behavior: opaque, renderObject: RenderPointerListener#d7e87)
    #                                 └Builder(dependencies: [IconTheme])
    #                                  └IconTheme(IconThemeData#15fa8(color: Color(0xffffffff)))
    #                                   └Container(padding: EdgeInsets.zero)
    #                                    └Padding(padding: EdgeInsets.zero, dependencies: [Directionality], renderObject: RenderPadding#35ace)
    #                                     └Center(alignment: center, widthFactor: 1.0, heightFactor: 1.0, dependencies: [Directionality], renderObject: RenderPositionedBox#ed513)
    #                                      └Icon(IconData(U+0E3CB), dependencies: [Directionality, IconTheme])
    #                                       └Semantics(container: false, properties: SemanticsProperties, label: null, value: null, hint: null, hintOverrides: null, renderObject: RenderSemanticsAnnotations#10f97 relayoutBoundary=up1)
    #                                        └ExcludeSemantics(excluding: true, renderObject: RenderExcludeSemantics#49a4b relayoutBoundary=up2)
    #                                         └SizedBox(width: 24.0, height: 24.0, renderObject: RenderConstrainedBox#ce5bc relayoutBoundary=up3)
    #                                          └Center(alignment: center, dependencies: [Directionality], renderObject: RenderPositionedBox#4fd6c)
    #                                           └RichText(textDirection: ltr, softWrap: wrapping at box width, overflow: visible, maxLines: unlimited, text: "", dependencies: [_LocalizationsScope-[GlobalKey#624f7]], renderObject: RenderParagraph#a9bd9 relayoutBoundary=up1)
    
    When the exception was thrown, this was the stack: 
    #0      Hero._allHeroesFor.inviteHero.<anonymous closure> (package:flutter/src/widgets/heroes.dart:265:11)
    #1      Hero._allHeroesFor.inviteHero (package:flutter/src/widgets/heroes.dart:275:8)
    #2      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:294:21)
    #3      SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5117:14)
    #4      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:307:15)
    
    

    国外有一篇国外网友的错误 是记录他的错误,我的错误和他一样,正常点理解就是类似于Android里面两个空间抢占了焦点,是这个意思,我是这样理解的,但是按照flutter来说,是子树的获取点击事件被 c这个组件拦截,从而使 子树的点击被 FloatingActionButton 占领,解决的办法就是不要把 FloatingActionButton 和别的点击空间放置在同一树下,比如 共同当做item 放置在了 listview下,这样就会出现这样的问题;

    解决方案

    删除FloatingActionButton 的代码就好了。

    相关文章

      网友评论

          本文标题:Flutter页面跳转报错There are multiple

          本文链接:https://www.haomeiwen.com/subject/vfrdjktx.html