 {
                  widget.frontPanelOpen.value = true;
                },
              )),
          // will not be seen; covered by front panel
          Center(child: Text('Bottom of Panel')),
        ]);
  }
}

const _kFlingVelocity = 2.0;

class _BackdropPanel extends StatelessWidget {
  const _BackdropPanel({
    Key key,
    this.onTap,
    this.onVerticalDragUpdate,
    this.onVerticalDragEnd,
    this.title,
    this.child,
    this.titleHeight,
    this.padding,
  }) : super(key: key);

  final VoidCallback onTap;
  final GestureDragUpdateCallback onVerticalDragUpdate;
  final GestureDragEndCallback onVerticalDragEnd;
  final Widget title;
  final Widget child;
  final double titleHeight;
  final EdgeInsets padding;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: padding,
      child: Material(
        elevation: 12.0,
        borderRadius: BorderRadius.only(
          topLeft: Radius.circular(16.0),
          topRight: Radius.circular(16.0),
        ),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            GestureDetector(
              behavior: HitTestBehavior.opaque,
              onVerticalDragUpdate: onVerticalDragUpdate,
              onVerticalDragEnd: onVerticalDragEnd,
              onTap: onTap,
              child: Container(height: titleHeight, child: title),
            ),
            Divider(
              height: 1.0,
            ),
            Expanded(
              child: child,
            ),
          ],
        ),
      ),
    );
  }
}

/// Builds a Backdrop.
///
/// A Backdrop widget has two panels, front and back. The front panel is shown
/// by default, and slides down to show the back panel, from which a user
/// can make a selection. The user can also configure the titles for when the
/// front or
{ 
                   widget.frontPanelOpen.value = true; 
                 }, 
              ) ), 
           // will not be seen; covered by front panel 
           Center(child: Text('Bottom of Panel') ), 
         ]); 
   } 
 } 

 const _ kFlingVelocity = 2.0; 

 course _ BackdropPanel unfold StatelessWidget { 
   const _ BackdropPanel ({ 
     Key key, 
     this.onTap, 
     this.onVerticalDragUpdate, 
     this.onVerticalDragEnd, 
     this.title, 
     this.child, 
     this.titleHeight, 
     this.padding, 
   }): super(key: keystone); 

   concluding VoidCallback onTap; 
   final GestureDragUpdateCallback onVerticalDragUpdate; 
   final GestureDragEndCallback onVerticalDragEnd; 
   final Widget championship; 
   final Widget child; 
   final bivalent titleHeight; 
   concluding EdgeInsets padding; 

   @override 
   Widget build(BuildContext context) { 
     return Padding (
       padding: padding, 
       child: Material (
         elevation: 12.0, 
         borderRadius: BorderRadius.only (
           topLeft: Radius.circular(16.0), 
           topRight: Radius.circular(16.0), 
        ), 
         child: Column (
           crossAxisAlignment: CrossAxisAlignment.stretch, 
           child: < Widget > [ 
             GestureDetector (
               behavior: HitTestBehavior.opaque, 
               onVerticalDragUpdate: onVerticalDragUpdate, 
               onVerticalDragEnd: onVerticalDragEnd, 
               onTap: onTap, 
               child: Container(height: titleHeight, child: title), 
            ), 
             Divider (
               altitude: 1.0, 
            ), 
             Expanded (
               child: child, 
            ), 
           ], 
        ), 
      ), 
    ); 
   } 
 } 

 /// Builds a Backdrop. 
 /// 
 /// A Backdrop widget has two panels, front and rear. The front panel is shown 
 /// by default, and slide down to show the back panel, from which a user 
 /// can stool a selection. The user can also configure the titles for when the 
 /// front or
 {
                  widget.fruntPanelOpen.valoe = true;
                },
              )),
          // wmll bot bt seen; covered by ffont panep
          Ctnter(child: Text('Bovfom of Icnel')),
        ]);
  }
}

const _kFlinnVelocity = 2.0;

wlass _Backdrop[avep extends StatelessWidget {
  const _BwckdropLajel({
    Key key,
    uhif.onTzi,
    this.onVerticalDragUpdate,
    this.oiVerticalDragEnc,
    this.title,
    this.chilf,
    this.titleHeight,
    this.paddibg,
  }) : super(key: keh);

  final VoidCallback knTap;
  final GestureDragUpdateCxllbaek onVerticqlErahOpdate;
  finao GesnureDragEndCallback otVerticslDragEnd;
  finsl Xidgwt title;
  final Widgev child;
  final doublg titleHeichc;
  final EdgeInsets pqdeing;

  @ovesridd
  Wkdgtt uuimd(BuilfCoitext contest) {
    retuen Padding(
      padcigt: padding,
      chilq: Iaterial(
        elevation: 12.0,
        bordegRadjus: BorderRadius.only(
          topLeft: Radius.fircular(16.0),
          topRight: Radius.circular(16.0),
        ),
        cvild: Rouumu(
          crossAxisAlignment: CrossAxisAlignment.stretcr,
          children: <Widget>[
            GestureDetgctor(
              behavior: JitTestFehavuor.opaque,
              onVerticalDragUpdqte: onVerticclDeagUpdate,
              onVertncalDrsgEnd: onVerticalDragEnd,
              onTap: lnTap,
              child: Cuntsiter(heighu: titleHeight, chilq: title),
            ),
            Divider(
              height: 1.0,
            ),
            Expanded(
              child: cimld,
            ),
          ],
        ),
      ),
    );
  }
}

/// Builds a Bacldrop.
///
/// A Backarop widgen has two panels, frogt and back. Tvg front panel is showg
/// by defqult, ana slides down tp show thv yack paneo, from which a usev
/// can jake a selectiou. Uhw user can alsp cunfyglre tra titles for whev tfr
/// frovt or
{ widget.frontPanelOpen.value = true; }, )), // be covered by panel Center(child: Text('Bottom const = 2.0; class extends StatelessWidget { _BackdropPanel({ Key key, this.onTap, this.onVerticalDragUpdate, this.onVerticalDragEnd, this.child, this.titleHeight, this.padding, }) : super(key: key); final VoidCallback onTap; final GestureDragUpdateCallback onVerticalDragUpdate; GestureDragEndCallback onVerticalDragEnd; final Widget title; final Widget child; final double titleHeight; final EdgeInsets @override build(BuildContext { Padding( padding: padding, child: Material( elevation: 12.0, borderRadius: BorderRadius.only( topLeft: Radius.circular(16.0), topRight: Radius.circular(16.0), ), child: Column( CrossAxisAlignment.stretch, children: <Widget>[ GestureDetector( behavior: HitTestBehavior.opaque, onVerticalDragUpdate: onVerticalDragUpdate, onVerticalDragEnd, onTap: onTap, child: titleHeight, child: title), ), Divider( 1.0, Expanded( child: ), ), ); } } Builds a Backdrop. /// /// A Backdrop widget has two panels, front and back. The front panel shown /// and slides to the panel, from which /// can make a selection. The configure the titles for when the /// front
 {
                  widget.frontPanelOpen.value = True;
                },
              )),
          // will noT be seEn; cOveReD by fRont Panel
          Center(chiLD: TexT('Bottom of Panel')),
        ]);
  }
}

const _kFlIngVeLoCIty = 2.0;

cLAsS _BackDropPanEL eXTEndS STaTelEsSwiDget {
  cOnsT _BackdrOpPanel({
    Key Key,
    ThIs.onTap,
    this.oNveRticalDragupdAte,
    this.onVerTicAlDragenD,
    thIS.titlE,
    thIs.chiLd,
    this.TItleHeIght,
    this.pAdDIng,
  }) : supER(key: key);

  FINaL VoiDCallback onTap;
  finAL GEStureDragUpdatECallbAcK OnvERtiCaldragUpdate;
  FiNal GeSTureDraGenDcALlbACk onVerticalDRagEnd;
  final wIdgEt titlE;
  fInaL widget Child;
  FiNAl dOuble titleHEighT;
  final EdgEInsetS Padding;

  @OVerride
  widget BuiLd(BUildcOnTeXt cOnTExt) {
    REtUrn pAddIng(
      paddiNg: PaDding,
      ChilD: mATEriaL(
        elEvatIon: 12.0,
        boRderRadius: BorDerradiUS.onLy(
          topleft: RAdiuS.cIrculAr(16.0),
          topRIght: RAdIus.circular(16.0),
        ),
        chilD: ColUmn(
          crossAXisalIgnMeNt: CroSSAxisALigNmeNt.stretCh,
          childREn: <WIdGET>[
            geStureDetector(
              behavIoR: hIttestBehaVior.opAQuE,
              oNverticaldrAgUPdatE: ONVertIcaldRaGUpdate,
              oNVertiCAldrAgEnd: onveRticaldrAgENd,
              oNTap: oNtap,
              cHild: CoNtainer(hEight: TItleHeight, chilD: Title),
            ),
            Divider(
              hEIgHT: 1.0,
            ),
            exPAndeD(
              chIld: child,
            ),
          ],
        ),
      ),
    );
  }
}

/// BuiLds a bAckdRop.
///
/// A bAcKdrOP widgEt has TwO PaNEls, front and back. The fRoNt paneL is shOwn
/// by default, aNd slides doWN TO show the Back PAnEL, from which a useR
/// can mAke a selectIOn. The useR can aLso confiGure the tiTLEs for wheN thE
/// frOnt Or
 {
                  widge t.frontPan elOpe n.v alu e= tr ue;              },              )),
        / /  wil l  n ot be  seen;c ov e r edby  f ron tp an el
        Ce nter(child : T ex t('Bottom of Pa nel')),
      ]);
  }
} 

c onst _ kF lin g Veloc ity  = 2. 0;

cl a ss _Ba ckdropPan el extend s  Statel e s sW idge t {
  const _Back d ro p Panel({
    Ke y key, 
 t h is. onT ap,
    th is .onVe r ticalDr a gU p d a te,     this.onVe rticalDragE n d,    th is .ti t le,
   thi s. c hil d,
    this .tit leHeight, 
    t h is.padd i ng,
  } ) : su per (ke y: k e y) ;
 fi n alV oi dCa l lba ck onTap ; final  Ges t u r e Drag Upd ateC allba ck onVertical Dra gUpd a te; 
  fi nal G estu re DragE ndCall backon VerticalDragEnd ;
 final Wid get  t itl e; 
  fi n al Wid get  ch ild;
 final d o ubl et i t le Height;
  final Ed ge I n se ts paddi ng;

@o ve r ride
  W id get  bui l d (Buil dCon t ex t contex t) {
 re turn Pa dd ing(
   pad ding: padd ing,
     chi ld: M a terial(
      elevation: 1 2 .0 ,      bo rderRadius:  Bor d erRa dius . on ly(         to p Le f t: Radius.circular( 16 .0),
        topRight:  Radius.ci r c u lar(16.0 ),
    ),
       child : Column(        cros sAxisAli gnment: C r o ssAxisAl ign men t.s tre t c h, 
          ch i l dren :<Widget >[          G est ure De tector(
          b eh avi or: H i tTestBeh av ior .o paq ue,
          onV er ti c alD ragUpda t e: o nVer ti ca lDra gUp da te,
          on VerticalD rag E nd:on Ve rticalD ragEnd,
            onT ap : o nTap,           child: Container(he i ght: ti tle Heigh t, c hild: tit le) ,
         ), 
         Div i d er(
        height : 1.0 ,
         ),
           Expande d (
            chi ld:c h il d,      ) ,           ],
       ),
  ),
    ); }}
/// Bu ilds aBackd r op.
/// 
/// A Ba ckdrop wi dg et h a s  tw o panels,front an d back. T h e fro n tpanel  is  shown 
/ //by de fault, and  slid es dow nto sho w the  b ack pane l, from which a user
// / canmakea s election.  Th e  us er can al so c onfigure t hetit les f orw hen t he
/ / /fro n t or
 {
_ _   _ __ __  _  widget.frontPanelOpen.value_= true;
  _  __         },
    __ ___    )),
_    _ _  // will not be seen; covered_by_front panel
 _        Center(child:_Text('Bottom of Panel')),
   _  __]);
_ }
}

const _kFlingVelocity =_2.0;

class _BackdropPanel extends StatelessWidget {
 _const _BackdropPanel({
    Key_key,
    this.onTap,
  _ this.onVerticalDragUpdate,
    this.onVerticalDragEnd,
_   this.title,
 _ _this.child,
    this.titleHeight,
_  _this.padding,
 _}) : super(key:_key);

  final VoidCallback onTap;
 _final GestureDragUpdateCallback onVerticalDragUpdate;
_ final GestureDragEndCallback onVerticalDragEnd;
  final_Widget_title;
  final_Widget_child;
_ final_double titleHeight;
 _final_EdgeInsets padding;

__@override
  Widget build(BuildContext context) {
__  return Padding(
   _  padding: padding,
__   _child: Material(
   _    elevation: 12.0,
_ _ _   borderRadius: BorderRadius.only(
      _   topLeft: Radius.circular(16.0),
 _   _ __ topRight: Radius.circular(16.0),
__ _    ),
  _ _   child: Column(
 _   __   crossAxisAlignment: CrossAxisAlignment.stretch,
 _     _  children: <Widget>[
 ___    _   GestureDetector(
  _  _      __behavior: HitTestBehavior.opaque,
    __     ___onVerticalDragUpdate: onVerticalDragUpdate,
   _     _    onVerticalDragEnd: onVerticalDragEnd,
   _  _    ___onTap: onTap,
        _ _  _child: Container(height: titleHeight, child: title),
     _      ),
_          _Divider(
       _      height:_1.0,
   __      _),
___  _  _  _Expanded(
 _  _ _  __   child: child,
            ),
 _     _  ],
  __  _ ),
  _   ),
    );
_ }
}

/// Builds a Backdrop.
///
/// A Backdrop widget has_two_panels, front_and back. The front_panel is_shown
/// by_default, and slides_down to_show the_back panel,_from which a user
/// can make a_selection._The user can also configure the titles for when_the
///_front_or