Sobes.tech
Middle

Milleks kasutatakse Flutteris vidjet-kontrollereid?

sobes.tech AI

Vastus AI-lt

Flutteris kasutatakse vidžetivõtmeid konkreetse vidžeti oleku või käitumise välise juhtimise ja sellega suhtlemise jaoks.

Peamised eesmärgid:

  • Programmeeritud juhtimine: Vidžeti omaduste muutmine (näiteks loendi kerimine, kursoriga juhtimine tekstiväljal) ilma otsese kasutajaliidese sekkumiseta.
  • Informatsiooni kogumine: Praeguse vidžeti oleku lugemine (näiteks kerimise asukoht, sisestatud tekst).
  • Sündmuste reageerimine: Vidžetiga seotud tegevuste teostamine vastusena teiste rakenduse osade sündmustele.

Populaarsed kontrollijad:

  • TextEditingController: Tekstiväljade (TextField, TextFormField) juhtimine. Annab võimaluse saada ja seada teksti, juhtida valikut ja kursorit.
    final myController = TextEditingController();
    
    // Teksti saamine väljast
    final text = myController.text;
    
    // Teksti seadmine väljast
    myController.text = 'Uus tekst';
    
  • ScrollController: Keritavate vidžettide (ListView, GridView, SingleChildScrollView) juhtimine. Annab võimaluse programmeerida kerimist, saada praegune asukoht ja kuulata kerimise sündmusi.
    final myScrollController = ScrollController();
    
    // Kerida algusesse
    myScrollController.animateTo(
      0,
      duration: Duration(milliseconds: 500),
      curve: Curves.easeOut,
    );
    
    // Saada praegune kerimise asukoht
    final position = myScrollController.position.pixels;
    
  • PageController: Lehekülgede juhtimine (PageView). Annab võimaluse vahetada lehekülgi, saada praegune lehekülg ja kuulata lehekülje muutmise sündmusi.
    final myPageController = PageController();
    
    // Liigu järgmisele leheküljele
    myPageController.nextPage(
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
    
    // Saada praegune lehekülg
    final currentPage = myPageController.page;
    

Kontrollerid antakse tavaliselt vastavale vidžetile selle konstruktoriga. Kontrolleri elutsükli juhtimine (loomine ja kustutamine) peaks toimuma vidžetis, mis seda kasutab, sageli initState meetodis selle loomise ja dispose meetodis selle vabastamise jaoks.

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  late final TextEditingController _textController;

  @override
  void initState() {
    super.initState();
    _textController = TextEditingController();
  }

  @override
  void dispose() {
    _textController.dispose(); // Oluline on ressursid vabastada
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _textController,
      // ... muud omadused
    );
  }
}

Kontrollerite kasutamine võimaldab selgelt eristada vidžeti juhtimise loogikat selle esitlusest.