小编Kri*_*ris的帖子

选择下拉按钮时 TextField 焦点卡住

我有一个文本字段和一个下拉菜单,都由 Bloc 控制。我遇到的问题是,一旦文本字段被选中,如果用户然后尝试从下拉菜单中选择某些内容,它就不会放弃焦点。菜单出现然后瞬间消失,焦点仍然在文本字段上。

这是一个演示问题的基本应用程序:

import 'dart:async';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Textfield Focus Example',
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {

  FormBloc formBloc = FormBloc();

  final List<DropdownMenuItem> userMenuItems = ['Bob', 'Frank']
      .map((String name) => DropdownMenuItem(
            value: name,
            child: Text(name),
          ))
      .toList();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            // user - drop down menu
            Row( …
Run Code Online (Sandbox Code Playgroud)

dart flutter bloc

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

如何在上下文之间共享块

在使用 导航到新上下文后,我尝试访问在应用程序根附近创建的 bloc 实例showDialog()。但是,如果我尝试像平常一样获取块,通过从上下文中获取它,例如_thisBlocInstance = BlocProvider.of<ThisBlocType>(context),我会收到一条错误,表明此上下文中没有提供块。

我认为这是因为showDialog()构建器方法为对话框中的小部件分配了一个新的上下文,这些小部件不知道我正在尝试查找的块,该块在用户登录后立即实例化:

  @override
Widget build(BuildContext context) {
  _authBloc = BlocProvider.of<AuthBloc>(context);
  _accountBloc = AccountBloc(authBloc: _authBloc);

  return BlocProvider(
    bloc: _accountBloc,

 ....
Run Code Online (Sandbox Code Playgroud)

角落里有一个按钮,显示一个对话框:

@override
Widget build(BuildContext context) {
  return Align(
    alignment: Alignment.bottomRight,
    child: Padding(
      padding: const EdgeInsets.all(18.0),
      child: FloatingActionButton(
        onPressed: () => showDialog(
          context: context,
          builder: (newContext) => EventDialog(),
        ).then(
          (val) => print(val)
        ),
        child: Icon(Icons.add),
      ),
    ),
  );
}
Run Code Online (Sandbox Code Playgroud)

在 EventDialog 中,我尝试再次找到具有上下文的块:

@override
void build(BuildContext context) {

  _accountBloc = BlocProvider.of<AccountBloc>(context);
  _userMenuItems …
Run Code Online (Sandbox Code Playgroud)

flutter bloc

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

标签 统计

bloc ×2

flutter ×2

dart ×1