小编Ale*_*ena的帖子

Flutter:从 Future 获取价值的正确方法

我有一个返回图像目录路径的函数,它执行一些额外的检查,比如目录是否存在,然后它会相应地运行。

这是我的代码:

Future<String> getImagesPath() async {
   final Directory appDir = await getApplicationDocumentsDirectory();
   final String appDirPath = appDir.path;

   final String imgPath = appDirPath + '/data/images';

   final imgDir = new Directory(imgPath);

   bool dirExists = await imgDir.exists();

   if (!dirExists) {
        await new Directory(imgPath).create(recursive: true);
   }

   return imgPath;

}
Run Code Online (Sandbox Code Playgroud)

这段代码按预期工作,但我在从Future.

案例场景: 我将数据存储在本地数据库中并尝试在列表视图中显示它。我正在使用FutureBuilder,如本答案中所述。每个数据行都有一个与之相连的图像(连接意味着,图像名称存储在db中)。

内部Widget build方法,我有这个代码:

@override
Widget build(BuildContext context) {
 getImagesPath().then((path){
     imagesPath = path;
     print(imagesPath); //prints correct path
   });
 print(imagesPath);   //prints null

return Scaffold(
    //removed
    body: FutureBuilder<List>( …
Run Code Online (Sandbox Code Playgroud)

asynchronous future async-await dart flutter

8
推荐指数
2
解决办法
2万
查看次数

适用于不同屏幕尺寸的Android布局

我正在努力为Android应用程序布局.我为不同的屏幕尺寸定义了不同的布局,当前的布局目录结构是这样的:

  • 布局
  • 布局土地
  • 布局小
  • 布局XLARGE
  • 布局XLARGE土地

问题

正在显示的主布局目录文件的3.7 to 7.0范围非常广泛.并且文字在小屏幕上重叠,如果我调整小; 它在大屏幕上变得非常小.

根据我的说法,应该为较小的屏幕呈现布局小文件,但这些文件仅针对Android穿戴设备呈现.

layout-xlarge似乎适用于 Nexus 9 to Nexus 10

我想知道,如何定义不同的布局3.7-5.05.0-7.0屏幕尺寸.

layout android android-layout

7
推荐指数
1
解决办法
8183
查看次数

Flutter:在数据库中插入数据列表的有效方法

我有cities表并试图在创建数据库时插入城市。表结构非常简单,只有idname列。

onCreate我的数据库类的方法中,我使用以下命令创建表:

var tblCities = 'cities';
await db.execute('CREATE TABLE $tblCities (id INTEGER PRIMARY KEY, name TEXT)');
Run Code Online (Sandbox Code Playgroud)

我有Cities模型类fromMaptoMap方法。

大约有 350 个城市,我想将它们插入表格中。

:最好且最简单的方法是什么?

这在我脑海中浮现:

  1. 创建城市列表
  2. 使用for循环迭代整个列表
  3. 使用toMap方法创建城市地图
  4. db.insert循环内调用方法

我不确定,但这似乎是愚蠢的方法,所以考虑更好和优化的解决方案......

bulkinsert dart flutter sqflite

7
推荐指数
2
解决办法
6862
查看次数

推动和拉动柱 - Bootstrap 4

这就是我需要的:

桌面: B A

移动:

A
B
Run Code Online (Sandbox Code Playgroud)

这是我的HTML:

<div class="row">

    <div class="col-md-7 col-sm-7 push-md-5">
        A
    </div>

    <div class="col-md-5 col-sm-5 pull-md-7">
        B
    </div>

</div>
Run Code Online (Sandbox Code Playgroud)

它在移动设备上的顺序正确,但在桌面上没有.我尝试了几个指南和帮助材料,但没有运气.在大多数指南中,它们移动的是相同的列,如4或6,所以清楚地理解它有点令人困惑.

grid-layout twitter-bootstrap bootstrap-4

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

Flutter:在 Future 函数中使用 try/catch

在我的应用程序中,我想用相机拍摄图像,image_picker为此我使用了库。

这是我的代码:

import 'dart:io';

import 'package:image_picker/image_picker.dart';

Future<File> getImage() async {
   var image = await ImagePicker.pickImage(source: ImageSource.camera);

   return image;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如果由于某种原因相机不可用,那么它会使应用程序崩溃。所以,我认为我们可以通过在内部使用它来避免这种情况try/catch(如果我错了,请纠正我)。

我添加了try/catch,这里是更新的代码:

try {
  var image = await ImagePicker.pickImage(source: ImageSource.camera);

} catch (e) {
  print(e);
}
return image;
Run Code Online (Sandbox Code Playgroud)

我的 IDE 抛出错误,变量image未定义

问题:

  1. try/catch在这种情况下我该如何正确使用?
  2. 的确try/catch是这几样问题的方法?
  3. 是否还有其他错误/异常,我应该关心?

try-catch dart flutter imagepicker

4
推荐指数
1
解决办法
6130
查看次数

PHP 静态方法与非静态方法/标准函数

我正在开发一个 Web 应用程序并第一次编写基于纯 OOP 的 PHP。我有一个关于静态方法VS标准函数的问题:

这是一个示例场景:

class Session
{
    public function start_new_session()
    {
        session_start();
        //other code here like token generator
    }
}
Run Code Online (Sandbox Code Playgroud)

VS

class Session
{
    static function start_new_session()
    {
        session_start();
        //other code here like token generator
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

  1. 两者有什么区别?
  2. 哪个更适合我的情况?
  3. 有什么应用吗?(我的意思是,使用静态方法和标准函数的最佳场景是什么)

我的研究:

我花了一些时间来寻找答案,但没有找到相关的答案,但是我发现了很多辩论和有用的材料。相信我,对于像我这样的初学者来说,很难决定(谁对谁错?):

  1. 在这个问题中有人说,在静态函数中使用 cookie 是一个可怕的想法,有人说这是一个好主意

  2. 在这个问题:每个人都在讨论对性能和一些专家说,静态函数执行速度更快,有的说; 功能更快。并且结果也因php版本不同而有所不同。

一些有用的统计数据:

PHP 5.2:静态方法快了大约 10-15%。

PHP 5.3:非静态方法快了约 15%

PHP 5.4:静态方法快了约 10-15%

PHP 5.5:静态方法快了约 20%

php oop

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

Woocommerce 使用产品 ID 获取供应商信息

我正在将 Woo Commerce 与 WC Vendor 和 WC Booking 插件一起使用。我想向供应商发送预订通知。目前它会向客户和管理员发送通知,当管理员将产品状态更改为正在处理和完成时,它会向供应商发送通知。但是,我想将供应商通知与管理员通知一起发送。

试过这个钩子:

add_action( 'woocommerce_new_booking', 'new_order_email_to_vendor', 10, 4 );
function new_order_email_to_vendor( $order ){

    $emails = WC()->mailer()->get_emails();

    if ( ! empty( $emails ) ) {
        $emails['WC_Product_Vendors_Order_Email_To_Vendor']->trigger( $order );
    }

}
Run Code Online (Sandbox Code Playgroud)

但它抛出一个错误:

Fatal error: Call to a member function get_date_created() on boolean in /wp-content/plugins/woocommerce-product-vendors/includes/emails/class-wc-product-vendors-order-email-to-vendor.php on line 56
Run Code Online (Sandbox Code Playgroud)

所以,现在我试图在这一行中直接挂钩供应商电子邮件以及客户和管理员电子邮件:

$this->recipient     = $this->get_option( 'recipient', get_option( 'admin_email' ), 'WILL ADD VENDOR EMAIL HERE' );
Run Code Online (Sandbox Code Playgroud)

文件中

wp-content/plugins/woocommerce-bookings/includes/emails/class-wc-email-new-booking.php
Run Code Online (Sandbox Code Playgroud)

在这个阶段,我有可预订的产品 ID,我正在尝试使用产品 ID 提取供应商信息,但我没有找到任何信息。

我 …

wordpress woocommerce hook-woocommerce

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

WordPress:在子主题中覆盖父主题类功能

我想重写子主题中的函数,该函数在父主题的类中定义。

这是示例代码:

class A extends B{
   function __construct(){
      $this->add_ajax('sync_post_data', 'need_to_override');
   }
   //other functions
   function need_to_override(){
      //function code
   }

}
Run Code Online (Sandbox Code Playgroud)

附加信息:

B类扩展了C类,C类是定义的根类add_ajax

我尝试过的:

  1. 由于该函数不可插入,因此我无法直接在子主题中覆盖函数。
  2. 其次,我尝试删除 ajax 操作并添加我的自定义操作。它抛出 500 内部服务器错误。

    remove_action( 'wp_ajax_sync_post_data', 'need_to_override' );
    add_action( 'wp_ajax_sync_post_data', 'custom_function' );
    
    function custom_function(){
       //function code with my custom modification
    }
    
    Run Code Online (Sandbox Code Playgroud)

有什么帮助请...

wordpress wordpress-theming parent-child

2
推荐指数
1
解决办法
4441
查看次数

Flutter:如何将 Drawer Header 宽度设置为最大值?

我正在我的应用程序中添加抽屉,并遵循官方指南。我想将 Drawer 分为三个部分:

  1. 抽屉头(顶部)

  2. 部分项目

  3. 设置(底部)

如果我ListView是其直接子代,Drawer则它可以正常工作,但我无法在底部添加“设置”部分。我发现了这个,它符合我的要求,但DrawerHeader不占用最大宽度。

这是我的代码

      Drawer(
            elevation: 1.5,
            child: Column(children: <Widget>[
              DrawerHeader(
                  decoration: BoxDecoration(
                color: Colors.redAccent,
              )),
              Expanded(
                  child: ListView(
                padding: EdgeInsets.zero,
                children: <Widget>[
                  //list tiles
                ],
              )),
              Container(
                color: Colors.black,
                width: double.infinity,
                height: 0.1,
              ),
              Container(
                  padding: EdgeInsets.all(10),
                  height: 100,
                  child: Text("V1.0.0",style: TextStyle(fontWeight: FontWeight.bold),)),
            ])),
Run Code Online (Sandbox Code Playgroud)

默认情况下,抽屉标题宽度不是最大的。它根据内容大小进行调整,如果我增加字体大小或在左侧和右侧添加填充,则需要更多的宽度。

检查下图以供参考:

在此处输入图片说明

navigation-drawer drawerlayout flutter flutter-layout

0
推荐指数
1
解决办法
6123
查看次数