Bahşiş Hesaplayıcı: Kişi Başı
Coddy'nin Flutter Journey'sinin Etkileşimli Uygulamalar bölümünün bir parçası. Ders 33 / 34.
Şimdi uygulamanın yanıtladığı soru: herkes ne kadar öder? Bu, diğer her şeyden çıkar, dolayısıyla tip'ten sonra build'in başına bir final daha eklenir:
final double each = (_bill + tip) / _people;Parantezler önemlidir. Dart, matematik dersindeki gibi önce bölme işlemini yapar; bu yüzden _bill + tip / _people yalnızca bahşişi paylaştırır.
Tutara bir dolar işareti eklenir ve Dart dizelerinde $ bir değişkeni başlatır. İşaretin kendisini göstermek için önüne ters eğik çizgi koy: \$. Ardından gerçek ${...} gelir:
Text('Each person pays \$${each.toStringAsFixed(2)}')Görev
Kolaybuildmetodunun başında, kişi başına düşen tutarı hesapla: hesabı ve bahşişi toplayıp kişi sayısına böl.- En altta,
28boyutunda ve kalın olarak göster: 40 tutarındaki hesap, %10 bahşiş ve 1 kişi içinEach person pays $44.00.
Kendin dene
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> {
double _bill = 0;
double _tipPercent = 10;
int _people = 1;
@override
Widget build(BuildContext context) {
final double tip = _bill * _tipPercent / 100;
return Scaffold(
appBar: AppBar(title: const Text('Tip Calculator')),
body: Padding(
padding: const EdgeInsets.all(24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
keyboardType: const TextInputType.numberWithOptions(decimal: true),
decoration: const InputDecoration(
labelText: 'Bill',
border: OutlineInputBorder(),
),
onChanged: (String value) {
setState(() {
_bill = double.tryParse(value) ?? 0;
});
},
),
const SizedBox(height: 8),
Text('Bill: ${_bill.toStringAsFixed(2)}'),
const SizedBox(height: 24),
Text('Tip: ${_tipPercent.round()}%', style: const TextStyle(fontSize: 20)),
Slider(
value: _tipPercent,
min: 0,
max: 30,
divisions: 6,
onChanged: (double value) {
setState(() {
_tipPercent = value;
});
},
),
Text('Tip amount: ${tip.toStringAsFixed(2)}'),
const SizedBox(height: 24),
Row(
children: [
Text('People: $_people', style: const TextStyle(fontSize: 20)),
const SizedBox(width: 16),
IconButton(
icon: const Icon(Icons.remove),
onPressed: _people > 1
? () {
setState(() {
_people--;
});
}
: null,
),
IconButton(
icon: const Icon(Icons.add),
onPressed: () {
setState(() {
_people++;
});
},
),
],
),
],
),
),
);
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Etkileşimli Uygulamalar bölümündeki tüm dersler
7Anahtarlar ve Kaydırıcılar
Bir Anahtarla Açıp KapatmaBir Onay Kutusunu İşaretlemeKaydırıcıyla Bir Değer Seçme5Karar Yapıları
bool ve ?: Operatörüif ve else ile Karar VermeDart'ta Ve, Veya ve DeğilBir Widget'ı Gösterme ve GizlemeBir Düğmeyi Pasifleştirme8Proje: Bahşiş Hesaplayıcı
Bahşiş Hesaplayıcı: HesapBahşiş Hesaplayıcı: BahşişKendi başına pratik yap: Online Flutter derleyicisi