热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

flutter入门之常见的flutter问题汇总(转)

1.使用AppBar后如何去掉左边的返回箭头。左边的图标对应的是leading,源代码如下(吐槽一下,CSDN暂不支持dart语言):Widgetleadingwidget.lea

1. 使用AppBar后如何去掉左边的返回箭头。左边的图标对应的是leading,源代码如下(吐槽一下,CSDN暂不支持dart语言):

   Widget leading = widget.leading;
    if (leading == null && widget.automaticallyImplyLeading) {
      if (hasDrawer) {
        leading = IconButton(
          icon: const Icon(Icons.menu),
          onPressed: _handleDrawerButton,
          tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip,
        );
      } else {
        if (canPop)
          leading = useCloseButton ? const CloseButton() : const BackButton();
      }
    }
    if (leading != null) {
      leading = ConstrainedBox(
        constraints: const BoxConstraints.tightFor(width: _kLeadingWidth),
        child: leading,
      );
}


修改方式为, leading为null,automaticallyImplyLeading为false:

appBar: AppBar(
  leading: null,
  automaticallyImplyLeading: false,
)

2. 使用flutter的canvas做文字绘制的时候用到的api为 TextPainter

3. 使用flutter绘制控件的时候想做到控件超出屏幕范围后自动换行,那么请参考 Wrap,可以轻松实现如下的布局:

 flutter入门之常见的flutter问题汇总(转)

 

4. 要实现类似安卓原生ViewPager的UI,请使用 PageView,注意定义自己的 PageController,然后可以利用PageController的jumpToPage(int)实现自定义的Page页的跳转

5. 要实现类似顶部和底部导航栏,请参考 TabBar,适当的时候可以和 AppBar 结合使用

6. flutter is a SingleTickerProviderStateMixin but multiple tickers were created. 报错,原因是多个地方调用setState请求重绘,但是state使用的是SingleTickerProviderStateMixin ,将其改成TickerProviderStateMixin即可。

7. 解决类冲突的问题,比如,我自定义一个Banner.dart类,这个类跟系统的Banner冲突,那么我们可以这样解决。

import 'package:flutter/material.dart';
import 'package:myproject/Banner.dart' as myproject;

//这样使用我们自己的Banner
myproject.Banner _myBanner;
//系统的Banner
Banner _banner;


8. 解决Android手机布局浸入到状态栏的问题,用一个 SafeArea 进行包装即可,如下:

SafeArea(
    top: true,
    child: MaterialApp(
    home: ,
),);


9. 在切换 tabbar 或者 pageview 的时候要保存上一个tab widget 的状态,参考 AutomaticKeepAliveClientMixin 既可,如下:

//假如PageView有四个子页面
 
 @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: PageView(
          controller: pageController,
          children: [
            ArticlesPage(),
            ProjectPage(),
            NavigationPage(),
            CollectionArticlesPage(),
          ],
          onPageChanged: changePage,
        ),
        bottomNavigationBar: Navigations(_page, changePage));
  }
 
 
 
//然后在子Page的State分别实现with AutomaticKeepAliveClientMixin,wantkeepAlive返回true
 
class ArticlesPageState extends State with AutomaticKeepAliveClientMixin{
  @override
  bool get wantKeepAlive => true;
}
 
class ProjectPageState extends State with AutomaticKeepAliveClientMixin{
  @override
  bool get wantKeepAlive => true;
}
 
class NavigationPageState extends State with AutomaticKeepAliveClientMixin{
  @override
  bool get wantKeepAlive => true;
}
 
class CollectionArticlesPageState extends State with AutomaticKeepAliveClientMixin{
  @override
  bool get wantKeepAlive => true;
}

 


10. Android手机启动时候白屏的问题解决,android/app/src/main/res/drawable/launch_background.xml中定义了自定义splash的方法:




    
 
    
    


注释去掉,替换为自己的launcher_image即可 。

 

11.  界面存在输入框的时候,点击后软键盘将页面顶起来导致页面重绘的问题(Android fitsystem),可以通过将Scaffold的resizeToAvoidBottomPadding属性设置为false来关闭重绘,如下:

return Scaffold(
      resizeToAvoidBottomPadding: false,
);


12. 修改TextFiled的边界宽度,可以通过decoration的contentPadding属性进行修改,如下:

return TextField(
        decoration: InputDecoration(
          contentPadding: EdgeInsets.all(8),
        ),
);


13. 如果想实现一个布局,在某些条件下显示,可以采用 Offstage 布局,动态控制其offstage属性值即可

14. 如果出现弹出输入法的时候导致Overflow错误,可以将布局镶嵌到SingleChildScrollView中,比如:

return Scaffold(
      body: SingleChildScrollView(
        child: Container(
          constraints: BoxConstraints(
            maxHeight: MediaQuery.of(context).size.height,
            maxWidth: MediaQuery.of(context).size.width,
          ),
        ),
    ),
);


15. GridView的item宽高默认是1:1,可以通过修改childAspectRatio的值来进行宽高的修改,该值代表宽:高

16. flutter中绘制虚线,使用  path_drawing

17. flutter 中禁用GridView的滚动,可以使用physics属性,取值为NeverScrollableScrollPhysics(),如下:

GridView.count(
      physics: NeverScrollableScrollPhysics(),
);


18. flutter隐藏状态栏,使用:

SystemChrome.setEnabledSystemUIOverlays([]);


19. 监听某个widget是否已经渲染完成,使用WidgetsBinding,方法是在initstate或者build中注册回调,如下:

WidgetsBinding.instance.addPostFrameCallback((callback){
      print("complete");
    });


20. flutter设置屏幕支持的方向:

   以下设置为设置整个项目运行到时候只允许横屏,如果需要其他方向,可以参考设置。

SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]).then((_){
    runApp(MyApp());
  });


对于IOS来说,可能我们设置只允许横屏了,但是效果确依旧可以竖屏,记得修改xcode的General--Deployment Info--Device Orientation属性,自己勾选对应的方向,如下。

 

设置屏幕显示方向,由于flutter中有bug,在IOS端可能不生效,需要插件支持,见 https://github.com/jadennn/flutter_orientation 

21. flutter设置多语言支持的时候发现在IOS端只显示英语的bug,是由于xcode中默认没有添加中文(其他语言类似)的选择,解决办法,在Info--Locallzations中选择需要的语言,如下:

 

22. flutter中禁止控件复用,可以使用不同的key,比如说,如果我们有一个stateful的控件,在initstate中进行了一些值的初始计算,在页面中需要展示多个这样的控件,不想多个控件公用同一套参数(换句话说,initstate只会在第一次初始化的时候调用),那么可以设置不同的key。

23. 裁剪图片的方法:

i

import 'dart:ui' as DartUi;
  
///根据src和dst裁剪图片
  static DartUi.Image getCroppedImage(DartUi.Image image, Rect src, Rect dst) {
    var pictureRecorder = new DartUi.PictureRecorder();
    Canvas canvas = new Canvas(pictureRecorder);
    canvas.drawImageRect(image, src, dst, Paint());
    return pictureRecorder
        .endRecording()
        .toImage(dst.width.floor(), dst.height.floor());
  }


24. 在不使用BuildContext的情况下进行页面跳转:

    a. 创建一个global的key

static GlobalKey gNavigatorKey = new GlobalKey();


    b. 在MaterialApp初始化的时候使用

return MaterialApp(
      navigatorKey: Global.gNavigatorKey,
      routes:  {
        '/login': (BuildContext context) => new LoginPage(),
      },


//....代码省略
    c. 需要的地方使用:

Global.gNavigatorKey.currentState.pushNamedAndRemoveUntil('/login',(_) => false);


    注意的是这种方法代价比较大,除非特殊情况,否则不建议使用。使用的时候根据不同的场景调用不同的push方法

 

25. IOS卡在闪屏页的解决方案:

    先运行 flutter build ios , 然后再在xcode中archive

 

 

作者:Hirabbit_jaden   来源:CSDN 

 


推荐阅读
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了如何在不使用SearchBar display controller的情况下,单独使用SearchBar并捕获其textChange事件。作者介绍了实际状况,即左侧SliderMenu中的SearchBar需要在主页TableView中显示搜索结果。然后,作者提供了解决方案和步骤,帮助读者实现这一功能。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
author-avatar
手机用户2602896463
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有