Flutter 按下时TextFormField未获得焦点

Flutter 按下时TextFormField未获得焦点,flutter,Flutter,当按下此TextFormField时,它不会获得焦点。下面是我的包含TextFormField的小部件代码 import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:cyphlyfe/profile/notifiers/profileNotifier.dart'; class Bio extends StatelessWidget { @override

当按下此TextFormField时,它不会获得焦点。下面是我的包含TextFormField的小部件代码

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:cyphlyfe/profile/notifiers/profileNotifier.dart';

class Bio extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final pNotifier = Provider.of<ProfileNotifier>(context);
    return Padding(
      padding: EdgeInsets.only(
        top: 15,
        left: 30,
        right: 30,
      ),
      child: pNotifier.editMode ? TextFormField(
        keyboardType: TextInputType.text,
        initialValue: pNotifier.profileInfo['bio'],
        maxLengthEnforced: true,
        maxLength: 140,
        decoration: InputDecoration(hintText: 'Write your bio here'),
        onChanged: (value) => pNotifier.updateProfileInfo('bio', value),
        style: TextStyle(
          fontSize: 16,
        ),
      ) : Text(
        pNotifier.profileInfo['bio'].isEmpty
            ? 'You have no bio. Add one!'
            : pNotifier.profileInfo['bio'],
        style: TextStyle(
          color: Colors.grey.shade600,
          fontSize: 16,
        ),
      ),
    );
  }
}

这是切换编辑模式的按钮,导致TextFormField出现

import 'package:cyphlyfe/profile/notifiers/profileNotifier.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class ButtonEdit extends StatefulWidget {
  @override
  _ButtonEditState createState() => _ButtonEditState();
}

class _ButtonEditState extends State<ButtonEdit> {
  ProfileNotifier pNotifier;

  @override
  Widget build(BuildContext context) {
    pNotifier = Provider.of<ProfileNotifier>(context);
    return pNotifier.editMode ? IconButton(
      icon: Icon(Icons.check),
      onPressed: onSave,
    ) : IconButton(
      icon: Icon(Icons.edit),
      onPressed: onEdit,
    );
  }

  void onEdit() {
    pNotifier.editMode = true;
  }

  Future<void> onSave() async {
    // todo: upload profile pic to firebase storage
    // todo: send profileInfo data in pNotifier to user service to update user record
    pNotifier.editMode = false;
    _showSavedSnackBar();

  }

  void _showSavedSnackBar() {
    Scaffold.of(context).showSnackBar(SnackBar(
      content: Row(
        children: <Widget>[
          Icon(
            Icons.check_circle,
            color: Colors.green,
            size: 24.0,
          ),
          SizedBox(width: 5.0),
          Text("Changes saved successfully.")
        ],
      ),
    ));
  }
}
还有,这里是父窗口小部件

import 'package:cyphlyfe/profile/widgets/appName.dart';
import 'package:cyphlyfe/profile/widgets/backdrop.dart';
import 'package:cyphlyfe/profile/widgets/bio.dart';
import 'package:cyphlyfe/profile/widgets/btnVideoCall.dart';
import 'package:cyphlyfe/profile/widgets/name.dart';
import 'package:cyphlyfe/profile/widgets/profileAppBar.dart';
import 'package:cyphlyfe/profile/widgets/profilePic.dart';
import 'package:flutter/material.dart';

class Profile extends StatefulWidget {
  @override
  _ProfileState createState() => _ProfileState();
}

class _ProfileState extends State<Profile> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
          children: <Widget>[
            Backdrop(),
            Container(
              margin: EdgeInsets.only(top: 90),
              child: Column(
                children: <Widget>[
                  AppName(),
                  SizedBox(height: 20.0),
                  ProfilePic(),
                  SizedBox(height: 10),
                  Name(),
                  Bio(),
                  SizedBox(height: 10),
                  ButtonVideoCall(),
                ],
              ),
            ),
            ProfileAppBar(),
          ],
        ),
    );
  }
}
如果相关,则minSdkVersion为16,compileSdkVersion为28,targetSdkVersion为28。我做错了什么

将焦点节点传递给TextFormField小部件 当按下按钮时,只需调用myFocusNode.requestFocus即可
原来这是堆栈中小部件的顺序。ProfileAppBar显示在容器顶部,阻止了容器子部件的手势检测。我将ProfileAppBar放在容器之前,一切都恢复正常。

据我所知,焦点节点是通过单击按钮或其他事件来访问TextFormField,对吗?我这边的情况是,当点击TextFormField本身时,它不会检索焦点。我曾尝试将TextFormField包装在手势检测器中,并请求对点击进行聚焦,但仍然没有work@Jaleel你试过把生物无状态小部件改成有状态小部件吗?是的,我试过了,得到了同样的结果