【问题标题】:Please explain what @override, initState, super.initState means in simple terms请简单解释一下@override、initState、super.initState是什么意思
【发布时间】:2021-05-23 10:10:06
【问题描述】:

我在网上浏览了这些词,但找不到简单的解释。

 @override
  void initState() {
    super.initState();
    _loadCounter();
  }

我正在阅读关于颤振食谱的示例代码>持久性>将键值数据存储在磁盘上https://flutter.dev/docs/cookbook/persistence/key-value

完整代码:

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of the application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Shared preferences demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Shared preferences demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  @override
  void initState() {
    super.initState();
    _loadCounter();
  }

  //Loading counter value on start
  void _loadCounter() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = (prefs.getInt('counter') ?? 0);
    });
  }

  //Incrementing counter after click
  void _incrementCounter() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = (prefs.getInt('counter') ?? 0) + 1;
      prefs.setInt('counter', _counter);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:
    @override 
    

    指出该函数也在祖先类中定义,但正在重新定义以在当前类中执行其他操作。它是可选的,但推荐使用,因为它提高了可读性。

    super.initState() 
    

    转发到小部件的 State 基类的默认实现。如果不覆盖,则不会执行默认实现,但小部件依赖于它才能正常工作。

    initState 
    

    在将小部件插入小部件树时调用...这意味着每当调用带有的小部件时,它将首先运行 initState 函数...。它只会被调用一次,如果您重新声明该小部件,它将不会不会再叫了

    【讨论】:

      猜你喜欢
      • 2013-04-03
      • 1970-01-01
      • 2019-02-17
      • 2021-02-07
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      相关资源
      最近更新 更多