Uygulama: Terminal Komutu Çalıştırma (IP Sorgulama)
Bu özellik, bir sistem yöneticisi için en kritik konulardan biridir. Pardus üzerinde çalışan grafik arayüzlü yönetim araçlarının (örneğin Lider Ahenk veya Pardus Mağaza) arka planda yaptığı şey tam olarak budur: Terminal komutlarını arayüzden tetiklemek.
Flutter'da bu işlem için dart:io kütüphanesini ve Process sınıfını kullanacağız.
İşte "IP Adresini Göster" özelliğini projemize ekleme adımları:
Mevcut lib/main.dart dosyamızı güncelleyeceğiz. Bu işlemde öğrencilere/izleyicilere Asenkron Programlama (işlem bitene kadar bekleme) mantığını da göstermiş olacağız.
1. Kodun Mantığı
dart:iokütüphanesini çağıracağız.hostname -Ikomutunu çalıştırarak IP adresini isteyeceğiz.Komutun cevabı gelene kadar uygulamayı
await(bekle) komutuyla senkronize edeceğiz.Gelen cevabı ekrana yazdıracağız.
2. Güncel main.dart Kodları
Dosyanızdaki kodları silip aşağıdaki güncel hali yapıştırabilirsiniz. Değişiklikleri yorum satırlarıyla belirttim.
import 'package:flutter/material.dart';
import 'dart:io'; // 1. YENİLİK: Sistem kütüphanesi eklendi
void main() {
runApp(const PardusUygulamasi());
}
class PardusUygulamasi extends StatelessWidget {
const PardusUygulamasi({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Pardus Sistem Aracı',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blueAccent), // Sistemci rengi mavi olsun :)
useMaterial3: true,
),
home: const AnaSayfa(),
);
}
}
class AnaSayfa extends StatefulWidget {
const AnaSayfa({super.key});
@override
State<AnaSayfa> createState() => _AnaSayfaState();
}
class _AnaSayfaState extends State<AnaSayfa> {
// Değişkenlerimiz
bool _logoGorunurMu = false;
String _ipAdresi = "IP Adresi Sorgulanmadı"; // Ekranda görünecek yazı
void _logoDurumuDegistir() {
setState(() {
_logoGorunurMu = !_logoGorunurMu;
});
}
// 2. YENİLİK: Komut Çalıştırma Fonksiyonu
// 'async' kelimesi, bu işlemin zaman alacağını belirtir.
Future<void> _ipSorgula() async {
try {
// Process.run(Komut, [Parametreler])
// Terminale 'hostname -I' yazmış gibi işlem yapar.
final sonuc = await Process.run('hostname', ['-I']);
setState(() {
// sonuc.stdout bize terminal çıktısını verir.
// .trim() baştaki ve sondaki gereksiz boşlukları siler.
_ipAdresi = "IP Adresiniz:\n${sonuc.stdout.toString().trim()}";
});
} catch (e) {
setState(() {
_ipAdresi = "Hata oluştu: $e";
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text("Pardus Yönetim Paneli"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
// LOGO BÖLÜMÜ
if (_logoGorunurMu)
Container(
margin: const EdgeInsets.only(bottom: 20),
width: 150,
child: Image.asset('assets/pardus_logo.png'),
)
else
const Icon(Icons.computer, size: 100, color: Colors.grey),
const SizedBox(height: 30),
// 3. YENİLİK: IP BİLGİSİ GÖSTEREN KUTU
Container(
padding: const EdgeInsets.all(15),
decoration: BoxDecoration(
color: Colors.black12,
borderRadius: BorderRadius.circular(10),
border: Border.all(color: Colors.grey)
),
child: Text(
_ipAdresi,
style: const TextStyle(fontSize: 18, fontFamily: 'monospace'),
textAlign: TextAlign.center,
),
),
const SizedBox(height: 30),
// BUTONLAR
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton.icon(
onPressed: _logoDurumuDegistir,
icon: const Icon(Icons.image),
label: Text(_logoGorunurMu ? "Logoyu Gizle" : "Logoyu Göster"),
),
const SizedBox(width: 15),
// IP SORGULA BUTONU
ElevatedButton.icon(
onPressed: _ipSorgula,
icon: const Icon(Icons.network_wifi),
label: const Text("IP Sorgula"),
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blueAccent,
foregroundColor: Colors.white,
),
),
],
),
],
),
),
);
}
}
3. Çalıştırma ve Test
Terminalden uygulamayı başlatın:
flutter run -d linux
Ne Göreceksiniz?
Uygulama açıldığında gri bir bilgisayar ikonu ve "IP Adresi Sorgulanmadı" yazısı göreceksiniz.
"IP Sorgula" butonuna bastığınızda, uygulama anlık olarak Pardus sistemine soracak ve (örneğin)
IP Adresiniz: 192.168.1.35şeklinde cevabı ekrana basacaktır.
⚠️ Kritik Bilgi: "Yetki" Meselesi
Sistem yöneticisi olduğunuz için şu detayı öğrencileriniz sorabilir: "Hocam, sudo apt update gibi root yetkisi isteyen komutları nasıl çalıştırırız?"
Bu yöntem (Process.run) uygulamayı başlatan kullanıcının yetkileriyle çalışır. Eğer sudo gerektiren bir komut eklerseniz, uygulama arka planda şifre soramayacağı için hata verir. Bunun için pkexec (PolicyKit) kullanımı gerekir ki bu biraz daha ileri seviye bir konudur. Şimdilik ip, hostname, ls, whoami gibi kullanıcı yetkisiyle çalışan komutlar üzerinden gitmek eğitim için en doğrusudur.
Yorumlar
Yorum Gönder