首页 > 解决方案 > 颤振类双扩展

问题描述

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

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],
            )),
      ),
    );

}

标签: flutterdart

解决方案


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

你可以使用多个 Mixin 和with.

但在这种特殊情况下,您可能想要的是一个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'),
            )
          ],
        ),
      ),
    );
  }
}

推荐阅读