小编foo*_*ist的帖子

Flutter:在StatelessWidget中添加侦听器的位置?

如果我使用的是StatefulWidget,那么我将在initState方法中监听流。在StatelessWidget中,我该在哪里做类似的事情(想将Bloc与流一起用于状态管理)?我可以在build方法中做到这一点,但由于这些都是重复性的,所以我想知道是否有比检查如下所示的现有侦听器更有效的方法。我知道这是一个多余且无用的示例,但这只是为了显示问题。

    import "package:rxdart/rxdart.dart";

    import 'package:flutter/material.dart';

    final counter = BehaviorSubject<int>();
    final notifier = ValueNotifier<int>(0);

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

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        if (!counter.hasListener)
          counter.listen((value) => notifier.value += value);  

        return MaterialApp(
          home: Scaffold(
            body: Center(
              child:FlatButton(
                onPressed: () => counter.add(1),
                child: ValueListenableBuilder(
                  valueListenable: notifier,
                  builder: (context, value, child) => Text(
                    value.toString()
                  ),
                ),
              )
            ),
          )
        );
      }
    }
Run Code Online (Sandbox Code Playgroud)

listener dart flutter statelesswidget

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

Flutter:GestureDetector 在其中包含 ListView 时显然不会接收 Drag 事件

我错过了什么吗?文档说事件从最里面的孩子冒泡到祖先,但下面的代码不会打印“拖动”到控制台。不过,它确实打印了“点击”。将 NeverScrollablePhyiscs 应用于 ListView 确实有效,但我想在两个级别上监听事件。将 HitTestBehavior.translucent 应用于 GestureDetector 不会改变任何东西。

import "package:flutter/material.dart";

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

class MyApp extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return MaterialApp(
        home: MyHomePage(),
      );
    }
}

class MyHomePage extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: GestureDetector(
          onVerticalDragUpdate: (DragUpdateDetails details) {
            print("dragged");
          },
          onTap: () {
            print("tapped");
          },
          child: ListView.builder(
            itemBuilder: (context, index) {
              return Container(
                padding: EdgeInsets.all(20.0),
                child: Text(
                  "The GestureDetector above me does not react to drag events. Maybe …
Run Code Online (Sandbox Code Playgroud)

listview nested gesturedetector flutter

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

Flutter:PageController 不保留页面,尽管 keepPage:true

重现步骤:向左滑动,切换到红色Tab,然后Tab再次切换到紫色。

什么是: 执行步骤重现后,PageView第一个Tab再次出现在蓝页。

应该是什么:执行步骤重现后,PageView第一个Tab仍然在绿色页面。

我在这里缺少什么?

import "package:flutter/material.dart";
import "package:flutter/services.dart";

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

class MyApp extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      SystemChrome.setEnabledSystemUIOverlays([]);
      return MaterialApp(
        home: MyHome()
      );
    }
}

class MyHomeState extends State<MyHome> with TickerProviderStateMixin {
  TabController tabController;
  @override
    void initState() {
      tabController = tabController?? TabController(
        vsync: this,
        length: 2
      );
      super.initState();
    }
  @override
    void dispose() {
      tabController.dispose();
      super.dispose();
    }
  @override
    Widget build(BuildContext context) {
      return …
Run Code Online (Sandbox Code Playgroud)

pageviews dart flutter

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

Flutter:多次调用StatelessWidget.build

我总是在这里把代码放在我的问题中,但是这一次是不可能的,因为该错误可能在数千行代码中的任何地方。然而:

我注意到,主屏幕(StatelessWidget)的构建方法是MaterialApp(home属性)的后代,在调试模式下通常被调用一次,而在释放模式下则被调用一次。

在什么情况下会发生这种情况?我已经尝试过多次复制,但是失败了。

编辑:

问题是我将从媒体查询中获得的屏幕尺寸存储为全局变量,以便可以从任何地方访问它。现在,我需要在树的更下方的有状态小部件的init方法内部访问该变量。在调试模式下似乎没有问题,但是在发布模式下,使媒体查询(必须在内部)的窗口小部件的生成方法被怪异地调用了一次,媒体查询的结果为Size(0.0,0.0) ,然后调用该树下方的小部件的init方法,然后再调用两次带有媒体查询的build方法(这次使用正确的屏幕尺寸)。结果是我在init方法中没有正确的屏幕尺寸。

dart flutter statelesswidget

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

Flutter:OutlineButton 的 side 属性好像没有效果

产生一个OutlineButton带有白色边框的:

OutlineButton(
  shape: RoundedRectangleBorder(
    side: BorderSide(
      color: Colors.purple
    )
  ),
)
Run Code Online (Sandbox Code Playgroud)

生成FlatButton带有紫色边框的 a:

FlatButton(
  shape: RoundedRectangleBorder(
    side: BorderSide(
      color: Colors.purple
    )
  ),
)
Run Code Online (Sandbox Code Playgroud)

部分文档OutlineButton

边界边?BorderSide 定义按钮启用但未按下时边框的颜色,以及边框轮廓的宽度和样式。[...] 最终的

button dart flutter

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

颤振:在GridView的图块中使用GestureDetector抽头延迟

通常,以下行为本质上是快速的。但是,在GridView(或我假定的任何ScrollView(也尝试过ListView)中),性能似乎非常差。当我点击屏幕时,容器的不透明度会增加,但是会延迟一段时间。知道我缺少什么吗?

import "package:flutter/material.dart";
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return MaterialApp(
        home: Scaffold(
          body: MyWidget()
        )
      );
    }
}
class MyWidgetState extends State<MyWidget> {
  double opacity = 0.2;
  @override
    Widget build(BuildContext context) {
      return GridView.builder(
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3
        ),
        itemBuilder: (context, index) {
          return GestureDetector(
            onTap: () {
              setState(() {
                opacity = 0.2;                
              });
            },
            onTapDown: (details) {
              setState(() {
                opacity = 1.0;                
              });
            },
            child: Container(
              color: Colors.red.withAlpha((255 * opacity).toInt()) …
Run Code Online (Sandbox Code Playgroud)

gridview gesturedetector dart flutter

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

Flutter:无状态小部件中的可变字段

该课程StatelessWidget标记为immutable。不过,我现在用的scoped model,这意味着,我尽量避免StatefulWidget和使用model来改变stateStatelessWidget。这导致我non-final fields进入StatelessWidget,这不是原因errors,因为它只是一个warning。但是我想知道是否有更好的方法?

state immutability dart flutter statelesswidget

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