标签: flutter-hooks

Flutter Hooks 使用 useEffect 获取数据 - 在构建期间调用 setState() 或 markNeedsBuild()

目前正在探索functional_widgets 和flutter_hooks。对 reactjs 有同样的想法,我正在使用以下代码获取数据。

@hwidget
Widget homeScreen(BuildContext context) {
  TodoListProvider model = Provider.of<TodoListProvider>(context);
  useEffect(() {
    print('effect');
    model.fetchList();
    return () => {};
  }, []);
  return Scaffold(
    appBar: _buildAppbar(context, model),
    bottomNavigationBar: _buildBottomNav(context, model),
    floatingActionButton: _buildFloatingAction(context),
    body: PageTransitionSwitcher(
      duration: const Duration(milliseconds: 300),
      reverse: model.reverse,
      transitionBuilder: (
        Widget child,
        Animation<double> animation,
        Animation<double> secondaryAnimation,
      ) {
        return SharedAxisTransition(
          child: child,
          animation: animation,
          secondaryAnimation: secondaryAnimation,
          transitionType: SharedAxisTransitionType.horizontal,
        );
      },
      child: _getCurrentTab(model.currentIndex),
    ),
  );
}

Run Code Online (Sandbox Code Playgroud)

我不认为这是正确的方法,因为它会引发错误。在此处输入图片说明

flutter flutter-widget flutter-hooks

2
推荐指数
2
解决办法
3364
查看次数

Flutter useAnimationController 钩子不会重建小部件

我正在使用 flutter hooks 包在屏幕上对元素进行动画处理,但显然我做错了一些事情,因为该元素没有重建为动画。这是我的代码。

class Ball extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final xController = useAnimationController(
      duration: Duration(seconds: 3),
      lowerBound: 0,
      upperBound: 2,
      initialValue: 1,
    );

    final yController = useAnimationController(
      duration: Duration(seconds: 3),
      lowerBound: 0,
      upperBound: 2,
      initialValue: 1,
    );

    useEffect(() {
      xController.repeat(reverse: true);
      yController.repeat(reverse: true);

      return () {};
    });

    return Align(
      alignment: Alignment(
        xController.value - 1,
        yController.value - 1,
      ),
      child: Container(
        width: 12,
        height: 12,
        decoration: BoxDecoration(
          color: Colors.grey[900],
          shape: BoxShape.circle,
        ),
      ),
    );
  }
} …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-dependencies flutter-animation flutter-hooks

1
推荐指数
1
解决办法
1105
查看次数

如何在 Flutter hooks 中使用 List&lt;int&gt; 的State?

我有使用 flutter hooks 的非常简单的情况:

class PositionedTiles extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final counterList = useState<List<int>>([1,2,3,4,5]);
    return Scaffold(
        body: Text("Counter: ${counterList.value}"),
        floatingActionButton: FloatingActionButton(
              onPressed: () => counterList.value.removeAt(0),
              child: const Icon(Icons.sentiment_very_satisfied)),
        );
    );
  }
Run Code Online (Sandbox Code Playgroud)

因此,单击后floatingActionButton打印的列表 ( counterList) 不会改变。我的结论是没有调用重建。

为什么 hook 没有看到列表已更改?

如何指示列表 ( counterList) 在调用后已更改onPressed以便重建?

dart flutter flutter-widget flutter-hooks

1
推荐指数
1
解决办法
2424
查看次数

Flutter - 使用一次性块将 StatefulWidget 转换为 HookWidget

几周前我读到了关于flutter hooks 的内容,现在想在我的新项目中实现它。我的“基本”小部件是一个有状态的小部件,它具有某些项目原因的混合RouteAware原因。此外,每个人都有一个提供BehaviourSubject. RouteAware该块必须由 Widget 处理,这就是其 a的原因StatefulWidget。我在这里没有详细介绍,但 bloc 是通过许多依赖项构建的,并且像这样 MyWidget(bloc: //resolve bloc here) 一样传递。

有人可以帮我将其转换为 aHookWidget以及如何添加useAwareHook 吗?

class MyBloc{

 void dispose(){}

 void didPopNext(){}

 void didPush(){}


}

class MyWidget extends StatefulWidget{

  final MyBloc bloc;

  MyWidget({key, this.bloc}) : super(key: key);

  @override
  MyWidgetState createState() => MyWidgetState();


}


class MyWidgetState extends State<MyWidget> with RouteAware{

@override
  void didChangeDependencies() {
    super.didChangeDependencies();
    routeObserver.subscribe(this, ModalRoute.of(context));
  }

  @override
  void dispose() {
    routeObserver.unsubscribe(this);
    widget.bloc.dispose();
    super.dispose();
  }

  @override …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-dependencies flutter-hooks

0
推荐指数
1
解决办法
2524
查看次数