【问题标题】:flutter class double extends颤振类双扩展
【发布时间】:2021-06-02 22:32:03
【问题描述】:

是否可以在单个类中进行双重扩展?就我而言,我有 class AddCreditsState extends State<AddCredits> 课程,我只想在 class AddCreditsState extends State<AddCredits> 中扩展 HookWidget

class AddCreditsState extends State<AddCredits>{ // how do i insert the `HookWidget` here?
    return Scaffold(
      backgroundColor: Color.fromRGBO(10, 15, 39, 1),
      body: SingleChildScrollView(
        child: Container(
            width: globals.screenWidth,
            height: globals.screenHeight,
            margin: EdgeInsets.only(top: 25),
            child: Column(
              children: [headercol, body],
            )),
      ),
    );

}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    在 Dart 中,你可以implements 多个接口,但 Dart 只支持单继承。所以,你不能extends来自多个班级。

    您可以通过with 使用多个 Mixin。

    但在这种特殊情况下,您可能想要的是一个 StatefulHookWidget,一个可以在其构建方法中使用钩子的 StatefulWidget。

    完整源代码

    import 'package:flutter/material.dart';
    import 'package:flutter_hooks/flutter_hooks.dart';
    
    void main() {
      runApp(
        MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'StatefulHookWidget Example',
          home: HomePage(),
        ),
      );
    }
    
    class HomePage extends StatefulHookWidget {
      @override
      _HomePageState createState() => _HomePageState();
    }
    
    class _HomePageState extends State<HomePage> {
      String _state = 'Hello';
      @override
      Widget build(BuildContext context) {
        final _hookedVar = useState('Hello');
        return Scaffold(
          appBar: AppBar(title: Text('StatefulHookWidget Example')),
          body: Container(
            padding: EdgeInsets.all(16.0),
            alignment: Alignment.center,
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                Text('STATE: $_state'),
                const SizedBox(height: 16.0),
                Text('HOOK: ${_hookedVar.value}'),
                const SizedBox(height: 16.0),
                ElevatedButton(
                  onPressed: () {
                    setState(() => _state = 'Goodbye');
                    _hookedVar.value = 'Goodbye';
                  },
                  child: Text('CLICK ME'),
                )
              ],
            ),
          ),
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-04
      • 2023-01-03
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多