Я новичок в флаттере и хочу реализовать хук useEffect.
Вот мой виджет:
import 'dart:developer';
import 'package:flutter/material.dart';
class MarketRunnerChart extends StatefulWidget {
const MarketRunnerChart({Key? key}) : super(key: key);
@override
State<MarketRunnerChart> createState() => _MarketRunnerChartState();
}
class _MarketRunnerChartState extends State<MarketRunnerChart> {
@override
Widget build(BuildContext context) {
useEffect(() {
log('okok');
}, []);
return Text("Some text");
}
}
Но у меня ошибка The method 'useEffect' isn't defined for the type '_MarketRunnerChartState'.
Когда я удаляю useEffect
хук из build
функции и помещаю его прямо в класс, я получаю ошибку 'useEffect' must have a method body because '_MarketRunnerChartState' isn't abstract.
Я привык работать с React, но сейчас с флаттером не могу понять, как реализовать этот хук.
Как я должен это сделать?
Хороший туториал по хукам: medium.com/flutter-community/flutter-hooks-7754df814995
попробуйте добавить
import 'package:flutter_hooks/flutter_hooks.dart';
поверх вашего файла класса
импортные флаттер-хуки
import 'package:flutter_hooks/flutter_hooks.dart';
class MarketRunnerChart extends StatefulWidget {
const MarketRunnerChart({Key? key}) : super(key: key);
@override
State<MarketRunnerChart> createState() => _MarketRunnerChartState();
}
class _MarketRunnerChartState extends State<MarketRunnerChart> {
useEffect(() {
print('your log');
}, []);
@override
Widget build(BuildContext context) {
return Text("Some text");
}
}
Вы можете следовать примеру документа, импортировать flutter_hooks
, расширять HookWidget
.
import 'package:flutter_hooks/flutter_hooks.dart';
class Example extends HookWidget {
const Example({Key? key, })
: super(key: key);
@override
Widget build(BuildContext context) {
//your variable/instance like to listen
useEffect(() {
log('okok');
}, [...listenThisInstance...]);
return Container();
}
}
Подробнее о useEffect
Импортируйте эту библиотеку pub.dev/packages/flutter_hooks, и ваш виджет должен расширяться
HookWidget
вместоStatefulWidget
.