Переменные с final
Часть раздела Добавляем интерактивность путешествия по Flutter на Coddy. Урок 16 из 34.
final — это другое слово для значения, которое не меняется. Переменной final значение присваивается один раз, и ей больше никогда нельзя присвоить другое значение:
final int total = _tickets * 12;
total = 50; // ошибка: total объявлена как finalРазница с const заключается в том, когда известно значение. Значение const известно в момент написания кода, например 12. Значение final можно вычислить во время работы приложения, например _tickets * 12, поскольку оно зависит от того, сколько билетов есть сейчас.
const int price = 12; // всегда 12
final int total = _tickets * price; // известно при выполнении buildПеременная final в начале build вычисляется заново при каждой сборке, поэтому после setState в ней хранится новое общее значение. Используй final для значения, которое задаёшь один раз и только считываешь, а обычные int или String — для значения, которое меняешь, например _tickets.
Задание
ЛегкоОдин билет стоит 12. В начале build добавь const int price = 12; и переменную final total, значение которой равно _tickets, умноженному на price. Покажи её как Total: 12 вместо Total: ?, чтобы после добавления ещё одного билета отображалось Total: 24.
Попробуйте сами
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int _tickets = 1;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Tickets')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('Tickets: $_tickets', style: const TextStyle(fontSize: 24)),
Text('Total: ?', style: const TextStyle(fontSize: 24)),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
setState(() {
_tickets++;
});
},
child: const Text('Add a ticket'),
),
],
),
),
);
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Добавляем интерактивность
1Кнопки
Ваша первая кнопкаВывод в консольТекстовые и контурные кнопкиКнопки с иконкамиПлавающая кнопка действия7Переключатели и ползунки
Включаем и выключаем переключателемОтмечаем флажокВыбираем значение ползункомПотренируйтесь самостоятельно: Онлайн-компилятор Flutter