Sobes.tech
Middle

Kam tiek izmantoti widget kontrolieri Flutter?

sobes.tech AI

Atbilde no AI

Flutter'da viedtjuetu kontrolieri tiek izmantoti, lai ārēji pārvaldītu konkrēta viedtjueta stāvokli vai uzvedību, kā arī ar to sadarboties.

Galvenie mērķi:

  • Programmatūra vadība: Viedtjueta īpašību maiņa (piemēram, saraksta ritināšana, kursora vadība teksta laukā) bez tiešas lietotāja mijiedarbības.
  • Informācijas iegūšana: Lasīt pašreizējo viedtjueta stāvokli (piemēram, pašreizējo ritināšanas pozīciju, ievadīto tekstu).
  • Notikumu reakcija: Veikt darbības, kas saistītas ar viedtjuetu, kā atbildi uz citu daļu notikumiem lietojumprogrammā.

Populāru kontrolieru piemēri:

  • TextEditingController: Teksta lauku (TextField, TextFormField) vadība. Ļauj iegūt un iestatīt tekstu, vadīt izcelšanu un kursora pozīciju.
    final myController = TextEditingController();
    
    // Iegūt tekstu no lauka
    final text = myController.text;
    
    // Iestatīt tekstu lauka
    myController.text = 'Jauns teksts';
    
  • ScrollController: Ritināmo viedtjuetu vadība (ListView, GridView, SingleChildScrollView). Ļauj programmatiski ritināt, iegūt pašreizējo pozīciju un klausīties ritināšanas notikumus.
    final myScrollController = ScrollController();
    
    // Ritināt uz sākumu
    myScrollController.animateTo(
      0,
      duration: Duration(milliseconds: 500),
      curve: Curves.easeOut,
    );
    
    // Iegūt pašreizējo ritināšanas pozīciju
    final position = myScrollController.position.pixels;
    
  • PageController: Lapu vadība (PageView). Ļauj pārslēgties starp lapām, iegūt pašreizējo lapu un klausīties lapas maiņas notikumus.
    final myPageController = PageController();
    
    // Pāriet uz nākamo lapu
    myPageController.nextPage(
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
    
    // Iegūt pašreizējo lapu
    final currentPage = myPageController.page;
    

Kontrolieri parasti tiek nodoti attiecīgajam widget'am caur tā konstruktoru. Kontroliera dzīves cikla vadība (izveide un iznīcināšana) jāveic widget'ā, kas to izmanto, bieži initState metodē izveidojot un dispose metodē iznīcinot.

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(); // Ir svarīgi atbrīvot resursus
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _textController,
      // ... citas īpašības
    );
  }
}

Viedtjuetu kontrolieru izmantošana ļauj skaidri atdalīt vadības loģiku no tā attēlojuma.