Flutter 问题解决总结

原文链接:https://juejin.im/post/5c91a8da5188252db75696c0

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

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

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

在Scaffold加属性resizeToAvoidBottomPadding: false

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

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

 
  1. InkWell(

  2. onTap: () {

  3. FocusScope.of(context).requestFocus(FocusNode());

  4. },

  5. child: child

  6. )

  7. 复制代码

4. ScrollView 嵌套 ListView 滚动问题

 
  1. ListView.builder(

  2. shrinkWrap: true,

  3. physics: NeverScrollableScrollPhysics(),// 主要这个

  4. padding: EdgeInsets.fromLTRB(15, 0, 15, 15),

  5. itemCount: subjects.length,

  6. itemBuilder: (BuildContext context, int position) {

  7. return getItem(context, subjects[position]);

  8. });

  9. 复制代码

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

 
  1. override fun onBackPressed() {

  2. if (flutterView != null) {

  3. flutterView?.popRoute()

  4. } else {

  5. super.onBackPressed()

  6. }

  7. }

  8. 复制代码

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

 
  1. 依赖:flutter_localizations:

  2. sdk: flutter

  3.  
  4. import 'package:flutter_localizations/flutter_localizations.dart';

  5.  
  6. return MaterialApp(

  7. home: child,

  8. localizationsDelegates: [

  9. GlobalMaterialLocalizations.delegate,

  10. GlobalWidgetsLocalizations.delegate,

  11. ],

  12. supportedLocales: [

  13. const Locale('zh', 'CH'),

  14. // const Locale('en', 'US'),

  15. ],

  16. );

  17. 复制代码

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

 
  1. ProgressDialog _progressDialog = ProgressDialog(context);

  2. ApiRepository.resetPassword(_phoneController.text, _codeController.text,

  3. _newPasswordContrpller.text)

  4. .doOnDone(() => _progressDialog.hide())

  5. .doOnListen(() => _progressDialog.show())

  6. .doOnError((error, stacktrace) {

  7. if (error is DioError) {

  8. showToast("加载失败,请检查网络连接");

  9. }

  10. }).listen((baseResp) {

  11. if (baseResp != null && baseResp.isSuccess()) {

  12. showToast("重置成功");

  13. Navigator.pop(context);

  14. } else {

  15. showToast(baseResp.msg);

  16. }

  17. });

  18. 复制代码

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

Android端添加回调代码

 
  1. override fun onActivityResult(requestCode: Int, resultCode:Int, data: Intent?) {

  2. super.onActivityResult(requestCode, resultCode, data)

  3. flutterView?.pluginRegistry?.onActivityResult(requestCode, resultCode, data)

  4. }

  5.  
  6. override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {

  7. super.onRequestPermissionsResult(requestCode, permissions, grantResults)

  8. flutterView?.pluginRegistry?.onRequestPermissionsResult(requestCode, permissions, grantResults)

  9. }

  10. 复制代码

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

有一种方法在iOS中显示Android的风格

 
  1. Theme(

  2. data: ThemeData(platform: TargetPlatform.android),

  3. child: TextField(

  4. *****)

  5. )

  6. 复制代码

还有一种方法实现iOS本来的风格 参考此文章

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值