/
Kryuchok
/
flutter
Обзор
Документация
Войти
/
Kryuchok
/
flutter
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
examples/api/lib/widgets/basic/indexed_stack.0.dart
139 строк
4 KB
Bilal Rehman
Dispose TextEditingController in IndexedStack example (#186375)
16 май 2026, 01:40
Не верифицирован
16 май 2026, 01:40
488bdad
Код
Авторство
О чём код?
// 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. import 'package:flutter/material.dart'; /// Flutter code sample for [IndexedStack]. void main() => runApp(const IndexedStackApp()); class IndexedStackApp extends StatelessWidget { const IndexedStackApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('IndexedStack Sample')), body: const IndexedStackExample(), ), ); } } class IndexedStackExample extends StatefulWidget { const IndexedStackExample({super.key}); @override State<IndexedStackExample> createState() => _IndexedStackExampleState(); } class _IndexedStackExampleState extends State<IndexedStackExample> { List<String> names = <String>['Dash', 'John', 'Mary']; int index = 0; final TextEditingController fieldText = TextEditingController(); @override void dispose() { fieldText.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Column( mainAxisAlignment: .center, children: <Widget>[ SizedBox( width: 300, child: TextField( decoration: const InputDecoration( border: OutlineInputBorder(), hintText: 'Enter the name for a person to track', ), onSubmitted: (String value) { setState(() { names.add(value); }); fieldText.clear(); }, controller: fieldText, ), ), const SizedBox(height: 50), Row( mainAxisAlignment: .center, children: <Widget>[ GestureDetector( onTap: () { setState(() { index = (index - 1) % names.length; }); }, child: const Icon(Icons.chevron_left, key: Key('gesture1')), ), Column( mainAxisAlignment: .center, children: <Widget>[ IndexedStack( index: index, children: <Widget>[ for (final String name in names) PersonTracker(name: name), ], ), ], ), GestureDetector( onTap: () { setState(() { index = (index + 1) % names.length; }); }, child: const Icon(Icons.chevron_right, key: Key('gesture2')), ), ], ), ], ); } } class PersonTracker extends StatefulWidget { const PersonTracker({super.key, required this.name}); final String name; @override State<PersonTracker> createState() => _PersonTrackerState(); } class _PersonTrackerState extends State<PersonTracker> { int counter = 0; @override Widget build(BuildContext context) { return Container( key: Key(widget.name), decoration: BoxDecoration( color: const .fromARGB(255, 239, 248, 255), border: .all(color: const .fromARGB(255, 54, 60, 244)), borderRadius: const .all(Radius.circular(10)), ), padding: const .all(16.0), child: Column( children: <Widget>[ Text('Name: ${widget.name}'), Text('Score: $counter'), TextButton.icon( key: Key('increment${widget.name}'), icon: const Icon(Icons.add), onPressed: () { setState(() { counter += 1; }); }, label: const Text('Increment'), ), ], ), ); } }