Flutter Streambuilder内部的手势识别器不';t更新快照数据

Flutter Streambuilder内部的手势识别器不';t更新快照数据,flutter,dart,Flutter,Dart,我认为问题在于链接的onTap 创建一个TapGestureRecognizer作为变量,然后设置onTap(如果快照有数据可用)。我不太清楚您的解释和代码,因为您没有使用url,也不知道如何请求新数据。 在下面的代码中,我使用了您的代码并做了一个示例,希望对您有所帮助 有一个计数器和一个流,流和计数器由一个启动,每次用户单击文本时,计数器增加一个,文本显示新的数字 对于流,虽然它还没有被提取,但它返回null,当数据被完全提取时,它返回null。 您可以通过交换机内的snapshot.conn

我认为问题在于链接的onTap


创建一个TapGestureRecognizer作为变量,然后设置onTap(如果快照有数据可用)。

我不太清楚您的解释和代码,因为您没有使用url,也不知道如何请求新数据。 在下面的代码中,我使用了您的代码并做了一个示例,希望对您有所帮助

有一个计数器和一个流,流和计数器由一个启动,每次用户单击文本时,计数器增加一个,文本显示新的数字

对于流,虽然它还没有被提取,但它返回null,当数据被完全提取时,它返回null。 您可以通过交换机内的snapshot.connectionState来处理不同的连接状态,也可以只处理两种情况,即是否有数据

此外,您还可以将
RichText
包装到其他小部件中,如
gesturedector()

导入'dart:async';
导入“package:flatter/signatures.dart”;
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key}):超级(Key:Key);
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
流控制器流;
整数计数器;
@凌驾
void initState(){
计数器=1;
stream=StreamController()…sink.add(counter.toString());
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
正文:中(
子项:_widget(),
),
),
);
}
Widget_Widget(){
返回流生成器(
stream:stream.stream,
生成器:(上下文,异步快照){
返回(snapshot.hasData)
?RichText(
text:TextSpan(
儿童:[
TextSpan(
text:snapshot.data,
样式:consttextstyle(
颜色:颜色,黑色,
fontWeight:fontWeight.w400,
尺寸:50,
),
识别器:TapGestureRecognizer()
…onTap=()=>stream.sink.add(++counter.toString()),
),
],
),
)
:居中(子项:循环压缩机指示器());
},
);
}
@凌驾
无效处置(){
stream.close();
super.dispose();
}
}

是否尝试检查快照.connectionState并仅在其值为
connectionState.done
时执行代码(返回
TextSpan
)@最白目 我试图复制你的代码,但错误是不可复制的。复制和粘贴代码,更改stream.periodic的流(持续时间(秒:5),(索引)=>index.toString());没问题,所以这不是文本的问题。这很有趣,谢谢。
StreamBuilder<String>(
  stream: _bloc.urlStream,
  builder: (context, snapshot) {
  // 1.) url is NOT null here, expected value
  final url = snapshot.data;
  return RichText(
    text: TextSpan(
      children: [
        // ...
        TextSpan(
          text: "...",
          style: const TextStyle(
            color: ThemeColor.lottoRed,
            fontWeight: FontWeight.w400,
            fontSize: 14,
          ),
          recognizer: TapGestureRecognizer()
            ..onTap = () {
              // 2.) url is null here
            },
        ),
      ],
    ),
  );
}),
StreamBuilder<String>(
  stream: _bloc.deregisterUrlStream,
  builder: (context, snapshot) {
    final url = snapshot.data;
    
    return CustomButton(
      action: () {
        // url NOT null here, works!
      },
      text: "testbutton"
    );
  },
),