// 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_scaffold_center.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 OrderedTraversalPolicy // //*************************************************************************** //* ▼▼▼▼▼▼▼▼ description ▼▼▼▼▼▼▼▼ (do not modify or remove section marker) // This sample shows how to assign a traversal order to a widget. In the // example, the focus order goes from bottom right (the "One" button) to top // left (the "Six" button). //* ▲▲▲▲▲▲▲▲ description ▲▲▲▲▲▲▲▲ (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 MaterialApp( title: _title, home: Scaffold( appBar: AppBar(title: const Text(_title)), body: const Center( child: MyStatelessWidget(), ), ), ); } } //***************************************************************************** //* ▼▼▼▼▼▼▼▼ code-preamble ▼▼▼▼▼▼▼▼ (do not modify or remove section marker) class DemoButton extends StatelessWidget { const DemoButton({ Key? key, required this.name, this.autofocus = false, required this.order, }) : super(key: key); final String name; final bool autofocus; final double order; void _handleOnPressed() { print('Button $name pressed.'); debugDumpFocusTree(); } @override Widget build(BuildContext context) { return FocusTraversalOrder( order: NumericFocusOrder(order), child: TextButton( autofocus: autofocus, onPressed: () => _handleOnPressed(), child: Text(name), ), ); } } //* ▲▲▲▲▲▲▲▲ code-preamble ▲▲▲▲▲▲▲▲ (do not modify or remove section marker) //***************************************************************************** /// 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) { return FocusTraversalGroup( policy: OrderedTraversalPolicy(), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Row( mainAxisAlignment: MainAxisAlignment.center, children: const <Widget>[ DemoButton(name: 'Six', order: 6), ], ), Row( mainAxisAlignment: MainAxisAlignment.center, children: const <Widget>[ DemoButton(name: 'Five', order: 5), DemoButton(name: 'Four', order: 4), ], ), Row( mainAxisAlignment: MainAxisAlignment.center, children: const <Widget>[ DemoButton(name: 'Three', order: 3), DemoButton(name: 'Two', order: 2), DemoButton(name: 'One', order: 1, autofocus: true), ], ), ], ), ); } //* ▲▲▲▲▲▲▲▲ code ▲▲▲▲▲▲▲▲ (do not modify or remove section marker) //******************************************************************** }