Flutter 问题解决总结

本文聚焦Flutter开发,涵盖路由后退黑屏、软键盘布局、iOS软键盘关闭、ScrollView嵌套ListView滚动等问题,还涉及Android嵌套Flutter后退处理、国际化、网络请求、组件集成回调及输入框复制粘贴弹窗报错等,给出了相应解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 路由开启下一个页面的,后退黑屏问题

当Navigator.push开启下一个页面,这个页面Navigator.pop(context)回到上一个页面出现黑屏,把当前页面的MaterialApp去掉就好

2. 弹软键盘,布局随键盘顶上去问题

在Scaffold加属性resizeToAvoidBottomPadding: false

3. 弹软键盘,iOS关闭不了软键盘

在布局外层包裹一层点击事件

 InkWell(
        onTap: () {
            FocusScope.of(context).requestFocus(FocusNode());
        },
        child: child
     )
复制代码

4. ScrollView 嵌套 ListView 滚动问题

      ListView.builder(
        shrinkWrap: true,
        physics: NeverScrollableScrollPhysics(),// 主要这个
        padding: EdgeInsets.fromLTRB(15, 0, 15, 15),
        itemCount: subjects.length,
        itemBuilder: (BuildContext context, int position) {
            return getItem(context, subjects[position]);
      });
复制代码

5. Android 嵌套Flutter 后退键返回上一级页面处理

override fun onBackPressed() {
    if (flutterView != null) {
        flutterView?.popRoute()
    } else {
        super.onBackPressed()
    }
}
复制代码

6. 国际化 当用一些控件时 默认是英文这时候就需要国际化了(例如:选择日期组件)

  依赖:flutter_localizations:
             sdk: flutter

  import 'package:flutter_localizations/flutter_localizations.dart';
  
  return MaterialApp(
     home: child,
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        const Locale('zh', 'CH'),
        // const Locale('en', 'US'),
      ],
    );
复制代码

7. Rxdart 进行网络请求 例如:

  ProgressDialog _progressDialog = ProgressDialog(context);
  ApiRepository.resetPassword(_phoneController.text, _codeController.text,
          _newPasswordContrpller.text)
      .doOnDone(() => _progressDialog.hide())
      .doOnListen(() => _progressDialog.show())
      .doOnError((error, stacktrace) {
    if (error is DioError) {
      showToast("加载失败,请检查网络连接");
    }
  }).listen((baseResp) {
    if (baseResp != null && baseResp.isSuccess()) {
      showToast("重置成功");
      Navigator.pop(context);
    } else {
      showToast(baseResp.msg);
    }
  });
复制代码

8. 集成image_pick不回调(Android端集成Flutter)

Android端添加回调代码

 override fun onActivityResult(requestCode: Int, resultCode:Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    flutterView?.pluginRegistry?.onActivityResult(requestCode, resultCode, data)
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    flutterView?.pluginRegistry?.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
复制代码

9. Flutter 在iPhone输入框中长按复制粘贴弹窗报错的问题

有一种方法在iOS中显示Android的风格
Theme(
    data: ThemeData(platform: TargetPlatform.android),
    child: TextField(
    *****)
    )
复制代码
还有一种方法实现iOS本来的风格 参考此文章

flutter cupertino 复制粘贴弹窗报错的问题

转载于:https://juejin.im/post/5c91a8da5188252db75696c0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值