// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Template: dev/snippets/config/templates/stateless_widget_material.tmpl // // Comment lines marked with "▼▼▼" and "▲▲▲" are used for authoring // of samples, and may be ignored if you are just exploring the sample. // Flutter code sample for NavigationRail.extendedAnimation // //*************************************************************************** //* ▼▼▼▼▼▼▼▼ description ▼▼▼▼▼▼▼▼ (do not modify or remove section marker) // This example shows how to use this animation to create a // [FloatingActionButton] that animates itself between the normal and // extended states of the [NavigationRail]. // // An instance of `ExtendableFab` would be created for // [NavigationRail.leading]. //* ▲▲▲▲▲▲▲▲ description ▲▲▲▲▲▲▲▲ (do not modify or remove section marker) //*************************************************************************** //******************************************************************************** //* ▼▼▼▼▼▼▼▼ code-dartImports ▼▼▼▼▼▼▼▼ (do not modify or remove section marker) import 'dart:ui'; //* ▲▲▲▲▲▲▲▲ code-dartImports ▲▲▲▲▲▲▲▲ (do not modify or remove section marker) //******************************************************************************** import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); /// This is the main application widget. class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); static const String _title = 'Flutter Code Sample'; @override Widget build(BuildContext context) { return const MaterialApp( title: _title, home: MyStatelessWidget(), ); } } /// This is the stateless widget that the main application instantiates. class MyStatelessWidget extends StatelessWidget { const MyStatelessWidget({Key? key}) : super(key: key); @override //******************************************************************** //* ▼▼▼▼▼▼▼▼ code ▼▼▼▼▼▼▼▼ (do not modify or remove section marker) Widget build(BuildContext context) { final Animation animation = NavigationRail.extendedAnimation(context); return AnimatedBuilder( animation: animation, builder: (BuildContext context, Widget? child) { // The extended fab has a shorter height than the regular fab. return Container( height: 56, padding: EdgeInsets.symmetric( vertical: lerpDouble(0, 6, animation.value)!, ), child: animation.value == 0 ? FloatingActionButton( child: const Icon(Icons.add), onPressed: () {}, ) : Align( alignment: AlignmentDirectional.centerStart, widthFactor: animation.value, child: Padding( padding: const EdgeInsetsDirectional.only(start: 8), child: FloatingActionButton.extended( icon: const Icon(Icons.add), label: const Text('CREATE'), onPressed: () {}, ), ), ), ); }, ); } //* ▲▲▲▲▲▲▲▲ code ▲▲▲▲▲▲▲▲ (do not modify or remove section marker) //******************************************************************** }