Flutter 之 日期时间选择器(iOS 风格)(九十一)

CupertinoDatePicker、CupertinoTimerPicker 是 iOS 风格的 DatePickerView 和 TimePickerView 的日期时间选择器。

1. CupertinoTimerPicker

CupertinoDatePicker 定义

  CupertinoDatePicker({
    Key? key,
    this.mode = CupertinoDatePickerMode.dateAndTime,
    required this.onDateTimeChanged,
    DateTime? initialDateTime,
    this.minimumDate,
    this.maximumDate,
    this.minimumYear = 1,
    this.maximumYear,
    this.minuteInterval = 1,
    this.use24hFormat = false,
    this.dateOrder,
    this.backgroundColor,
  })

CupertinoDatePicker 属性

CupertinoDatePicker 属性 介绍
mode CupertinoDatePickerMode 日期选择器模式 ,time,date,dateAndTime, 默认dateAndTime
onDateTimeChanged @required 选中日期变化回调
initialDateTime 当前日期
minimumDate 最小可选日期
maximumDate 最大可选日期
minimumYear 最小年份
maximumYear 最大年份
minuteInterval 分钟间隔 initialDateTime.minute 必须可以整除 minuteInterval 必须是 60 的整数因子
use24hFormat 是否使用24小时制
dateOrder 期选择器排序方式 默认年/月/日
backgroundColor 背景色

2. CupertinoDatePicker 实例

注意:取消、确认按钮是自己绘制的,不是cupertinoDatePicker提供的

示例1 CupertinoDatePickerMode.date

        final CupertinoDatePicker cupertinoDatePicker = CupertinoDatePicker(
          mode: CupertinoDatePickerMode
              .date, // 日期选择器模式 `time`,`date`,`dateAndTime`, 默认`dateAndTime`
          initialDateTime: DateTime.now(), // 初始化日期
          minimumDate: DateTime(2021, 10, 10), // 最小可选日期
          maximumDate: DateTime(2023, 12, 22), // 最大可选日期
          minimumYear: 2020, // 最小年份
          maximumYear: 2025, // 最大年份
          minuteInterval:
              1, // 分钟间隔  initialDateTime.minute 必须可以整除 minuteInterval 必须是 60 的整数因子
          use24hFormat: true, // 是否使用24小时制
          dateOrder: DatePickerDateOrder.dmy, // 日期选择器排序方式 默认年/月/日
          backgroundColor: Colors.white,
          // 选中日期变化回调
          onDateTimeChanged: (dateTime) {
            _chooseDateTime = dateTime;
          },
        );
image.png

示例2 CupertinoDatePickerMode.dateAndTime

        final CupertinoDatePicker cupertinoDatePicker = CupertinoDatePicker(
          mode: CupertinoDatePickerMode
              .dateAndTime, // 日期选择器模式 `time`,`date`,`dateAndTime`, 默认`dateAndTime`
          initialDateTime: DateTime.now(), // 初始化日期
          minimumDate: DateTime(2021, 10, 10), // 最小可选日期
          maximumDate: DateTime(2023, 12, 22), // 最大可选日期
          minimumYear: 2020, // 最小年份
          maximumYear: 2025, // 最大年份
          minuteInterval:
              1, // 分钟间隔  initialDateTime.minute 必须可以整除 minuteInterval 必须是 60 的整数因子
          use24hFormat: false, // 是否使用24小时制
          dateOrder: DatePickerDateOrder.ymd, // 日期选择器排序方式 默认年/月/日
          backgroundColor: Colors.white,
          // 选中日期变化回调
          onDateTimeChanged: (dateTime) {
            _chooseDateTime = dateTime;
          },
        );
image.png

示例3 CupertinoDatePickerMode.time

        final CupertinoDatePicker cupertinoDatePicker = CupertinoDatePicker(
          mode: CupertinoDatePickerMode
              .time, // 日期选择器模式 `time`,`date`,`dateAndTime`, 默认`dateAndTime`
          initialDateTime: DateTime.now(), // 初始化日期
          minimumDate: DateTime(2021, 10, 10), // 最小可选日期
          maximumDate: DateTime(2023, 12, 22), // 最大可选日期
          minimumYear: 2020, // 最小年份
          maximumYear: 2025, // 最大年份
          minuteInterval:
              1, // 分钟间隔  initialDateTime.minute 必须可以整除 minuteInterval 必须是 60 的整数因子
          use24hFormat: false, // 是否使用24小时制
          dateOrder: DatePickerDateOrder.ymd, // 日期选择器排序方式 默认年/月/日
          backgroundColor: Colors.white,
          // 选中日期变化回调
          onDateTimeChanged: (dateTime) {
            _chooseDateTime = dateTime;
          },
        );
image.png

3. CupertinoTimerPicker

CupertinoTimerPicker 定义

  CupertinoTimerPicker({
    Key? key,
    this.mode = CupertinoTimerPickerMode.hms,
    this.initialTimerDuration = Duration.zero,
    this.minuteInterval = 1,
    this.secondInterval = 1,
    this.alignment = Alignment.center,
    this.backgroundColor,
    required this.onTimerDurationChanged,
  }) 

CupertinoTimerPicker 属性

CupertinoTimerPicker 属性 介绍
mode CupertinoTimerPickerMode,时间选择器模式 ,hm,ms,hms,默认hms
initialTimerDuration 初始化时间
minuteInterval 分钟间隔
secondInterval 秒钟间隔
alignment 对齐方式
backgroundColor 背景色
onTimerDurationChanged @required ValueChanged<Duration> onTimerDurationChanged,选中时间变化回调

4. CupertinoTimerPicker 实例

示例1 CupertinoTimerPickerMode.hms

        final cupertinoTimerPicker = CupertinoTimerPicker(
          mode: CupertinoTimerPickerMode.hms, // 时间选择器模式
          initialTimerDuration: Duration(hours: 1), // 初始化时间
          minuteInterval: 5, // 分钟间隔
          secondInterval: 20, // 秒钟间隔
          alignment: Alignment.center, // 对齐方式
          backgroundColor: Colors.white, // 背景色
          // 选中时间变化回调
          onTimerDurationChanged: (dur) {
            chooseDuration = dur;
          },
        );
image.png

示例2 CupertinoTimerPickerMode.ms

        final cupertinoTimerPicker = CupertinoTimerPicker(
          mode: CupertinoTimerPickerMode.ms, // 时间选择器模式
          initialTimerDuration: Duration(minutes: 10), // 初始化时间
          minuteInterval: 5, // 分钟间隔
          secondInterval: 20, // 秒钟间隔
          alignment: Alignment.center, // 对齐方式
          backgroundColor: Colors.white, // 背景色
          // 选中时间变化回调
          onTimerDurationChanged: (dur) {
            chooseDuration = dur;
          },
        );
image.png

示例3 CupertinoTimerPickerMode.hm

        final cupertinoTimerPicker = CupertinoTimerPicker(
          mode: CupertinoTimerPickerMode.hm, // 时间选择器模式
          initialTimerDuration: Duration(minutes: 20), // 初始化时间
          minuteInterval: 5, // 分钟间隔
          secondInterval: 20, // 秒钟间隔
          alignment: Alignment.center, // 对齐方式
          backgroundColor: Colors.white, // 背景色
          // 选中时间变化回调
          onTimerDurationChanged: (dur) {
            chooseDuration = dur;
          },
        );
image.png

5. flutter_cupertino_datetime_picker 三方库

dependencies:
  flutter_cupertino_datetime_picker: ^3.0.0

示例1 - DateTimePickerMode.time

  _showDatePickerForTime(BuildContext context){
    iOSDatePicker.DatePicker.showDatePicker(
      context, // 上下文
      pickerMode: iOSDatePicker.DateTimePickerMode.time, // 选择器模式
      dateFormat: "HH:mm:ss", // 日期格式
      minuteDivider: 5, // 分钟间隔
      // 选择回调
      onConfirm: (DateTime dateTime, List<int> selectedIndex) {
        print("选择 $dateTime");
      },
      // 取消回调
      onCancel: () {},
      // 关闭回调
      onClose: () {},
      // 选中时间发生变化 回调
      onChange: (datetime, selectedIndex) {},
    );
  }
image.png

示例2 - DateTimePickerMode.datetime

  _showDatePickerForDateTime(BuildContext context){
    iOSDatePicker.DatePicker.showDatePicker(
      context,
      pickerMode: iOSDatePicker.DateTimePickerMode.datetime,
      minDateTime: DateTime(2022, 1, 10),
      maxDateTime: DateTime(2022, 10, 10),
      dateFormat: "yyyy|MM|dd HH:mm",
      onConfirm: (DateTime dateTime, List<int> selectedIndex) {
        print("选择 $dateTime");
      },
      onCancel: () {},
      onClose: () {},
      onChange: (datetime, selectedIndex) {},
    );
  }
image.png

示例3 - DateTimePickerMode.date

  _showDatePickerForDate(BuildContext context) {
    iOSDatePicker.DatePicker.showDatePicker(
      context,
      pickerMode: iOSDatePicker.DateTimePickerMode.date,
      minDateTime: DateTime(2022, 1, 10),
      maxDateTime: DateTime(2022, 10, 10),
      initialDateTime: DateTime.now(),
      dateFormat: "MM|dd,yyyy年",
      onConfirm: (DateTime dateTime, List<int> selectedIndex) {
        print("选择 $dateTime");
      },
      onCancel: () {},
      onClose: () {},
      onChange: (datetime, selectedIndex) {},
    );
  }
image.png

6. Demo

MSCupertinoDateAndTimePickerDemo


class MSCupertinoDateAndTimePickerDemo extends StatelessWidget {
  MSCupertinoDateAndTimePickerDemo({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("MSCupertinoDateAndTimePickerDemo")),
      body: SingleChildScrollView(
        child: Center(
          child: Column(
            children: [
              ElevatedButton(
                onPressed: () async {
                  DateTime? dateTime =
                      await _showCupertinoDatePickerForDate(context);
                  if (dateTime == null) {
                    print("取消选择");
                  } else {
                    print("选择 $dateTime");
                  }
                },
                child: Text("CupertinoDatePicker-Date"),
              ),
              ElevatedButton(
                onPressed: () async {
                  DateTime? dateTime =
                      await _showCupertinoDatePickerForDateAndTime(context);
                  if (dateTime == null) {
                    print("取消选择");
                  } else {
                    print("选择 $dateTime");
                  }
                },
                child: Text("CupertinoDatePicker-DateTime"),
              ),
              ElevatedButton(
                onPressed: () async {
                  DateTime? dateTime =
                      await _showCupertinoDatePickerForTime(context);
                  if (dateTime == null) {
                    print("取消选择");
                  } else {
                    print("选择 $dateTime");
                  }
                },
                child: Text("CupertinoDatePicker-Time"),
              ),
              ElevatedButton(
                onPressed: () async {
                  Duration? dur = await _showCupertinoTimePickerForHMS(context);
                  if (dur == null) {
                    print("取消选择");
                  } else {
                    print("选择 $dur");
                  }
                },
                child: Text("CupertinoTimerPicker-HMS"),
              ),
              ElevatedButton(
                onPressed: () async {
                  Duration? dur = await _showCupertinoTimePickerForMS(context);
                  if (dur == null) {
                    print("取消选择");
                  } else {
                    print("选择 $dur");
                  }
                },
                child: Text("CupertinoTimerPicker-MS"),
              ),
              ElevatedButton(
                onPressed: () async {
                  Duration? dur = await _showCupertinoTimePickerForHM(context);
                  if (dur == null) {
                    print("取消选择");
                  } else {
                    print("选择 $dur");
                  }
                },
                child: Text("CupertinoTimerPicker-HM"),
              ),
            ],
          ),
        ),
      ),
    );
  }

  // CupertinoDatePicker
  DateTime? chooseDateTime;
  _getActions(BuildContext context) {
    final Widget actions = Container(
      alignment: AlignmentDirectional.centerEnd,
      constraints: const BoxConstraints(minHeight: 52.0),
      padding: const EdgeInsets.symmetric(horizontal: 8),
      color: Colors.white,
      child: OverflowBar(
        alignment: MainAxisAlignment.spaceBetween,
        spacing: 8,
        children: <Widget>[
          TextButton(
            onPressed: () {
              Navigator.of(context).pop();
            },
            child: Text(
              "取消",
              textScaleFactor: 1.2,
            ),
          ),
          TextButton(
            onPressed: () {
              Navigator.of(context).pop(chooseDateTime);
            },
            child: Text(
              "确定",
              textScaleFactor: 1.2,
            ),
          ),
        ],
      ),
    );
    return actions;
  }

  Future<DateTime?> _showCupertinoDatePickerForDate(BuildContext context) {
    return showCupertinoModalPopup(
      context: context,
      builder: (context) {
        final CupertinoDatePicker cupertinoDatePicker = CupertinoDatePicker(
          mode: CupertinoDatePickerMode
              .date, // 日期选择器模式 `time`,`date`,`dateAndTime`, 默认`dateAndTime`
          initialDateTime: DateTime.now(), // 初始化日期
          minimumDate: DateTime(2021, 10, 10), // 最小可选日期
          maximumDate: DateTime(2023, 12, 22), // 最大可选日期
          minimumYear: 2020, // 最小年份
          maximumYear: 2025, // 最大年份
          minuteInterval:
              1, // 分钟间隔  initialDateTime.minute 必须可以整除 minuteInterval 必须是 60 的整数因子
          use24hFormat: true, // 是否使用24小时制
          dateOrder: DatePickerDateOrder.dmy, // 日期选择器排序方式 默认年/月/日
          backgroundColor: Colors.white,
          // 选中日期变化回调
          onDateTimeChanged: (dateTime) {
            chooseDateTime = dateTime;
          },
        );

        // 初始化chooseDateTime
        chooseDateTime = cupertinoDatePicker.initialDateTime;
        return AnimatedContainer(
          duration: Duration(microseconds: 200),
          height: 300,
          width: double.infinity,
          child: Column(
            children: [
              _getActions(context),
              Expanded(
                child: cupertinoDatePicker,
              ),
            ],
          ),
        );
      },
    );
  }

  Future<DateTime?> _showCupertinoDatePickerForDateAndTime(
      BuildContext context) {
    return showCupertinoModalPopup(
      context: context,
      builder: (context) {
        final CupertinoDatePicker cupertinoDatePicker = CupertinoDatePicker(
          mode: CupertinoDatePickerMode
              .dateAndTime, // 日期选择器模式 `time`,`date`,`dateAndTime`, 默认`dateAndTime`
          initialDateTime: DateTime.now(), // 初始化日期
          minimumDate: DateTime(2021, 10, 10), // 最小可选日期
          maximumDate: DateTime(2023, 12, 22), // 最大可选日期
          minimumYear: 2020, // 最小年份
          maximumYear: 2025, // 最大年份
          minuteInterval:
              1, // 分钟间隔  initialDateTime.minute 必须可以整除 minuteInterval 必须是 60 的整数因子
          use24hFormat: false, // 是否使用24小时制
          dateOrder: DatePickerDateOrder.ymd, // 日期选择器排序方式 默认年/月/日
          backgroundColor: Colors.white,
          // 选中日期变化回调
          onDateTimeChanged: (dateTime) {
            chooseDateTime = dateTime;
          },
        );

        // 初始化chooseDateTime
        chooseDateTime = cupertinoDatePicker.initialDateTime;

        return AnimatedContainer(
          duration: Duration(microseconds: 200),
          height: 300,
          width: double.infinity,
          child: Column(
            children: [
              _getActions(context),
              Expanded(
                child: cupertinoDatePicker,
              ),
            ],
          ),
        );
      },
    );
  }

  Future<DateTime?> _showCupertinoDatePickerForTime(BuildContext context) {
    return showCupertinoModalPopup(
      context: context,
      builder: (context) {
        final CupertinoDatePicker cupertinoDatePicker = CupertinoDatePicker(
          mode: CupertinoDatePickerMode
              .time, // 日期选择器模式 `time`,`date`,`dateAndTime`, 默认`dateAndTime`
          initialDateTime: DateTime.now(), // 初始化日期
          minimumDate: DateTime(2021, 10, 10), // 最小可选日期
          maximumDate: DateTime(2023, 12, 22), // 最大可选日期
          minimumYear: 2020, // 最小年份
          maximumYear: 2025, // 最大年份
          minuteInterval:
              1, // 分钟间隔  initialDateTime.minute 必须可以整除 minuteInterval 必须是 60 的整数因子
          use24hFormat: false, // 是否使用24小时制
          dateOrder: DatePickerDateOrder.ymd, // 日期选择器排序方式 默认年/月/日
          backgroundColor: Colors.white,
          // 选中日期变化回调
          onDateTimeChanged: (dateTime) {
            chooseDateTime = dateTime;
          },
        );
        // 初始化chooseDateTime
        chooseDateTime = cupertinoDatePicker.initialDateTime;
        return AnimatedContainer(
          duration: Duration(microseconds: 200),
          height: 300,
          width: double.infinity,
          child: Column(
            children: [
              _getActions(context),
              Expanded(
                child: cupertinoDatePicker,
              ),
            ],
          ),
        );
      },
    );
  }

  // CupertinoTimerPicker
  Duration? chooseDuration;
  _getActions2(BuildContext context) {
    final Widget actions = Container(
      alignment: AlignmentDirectional.centerEnd,
      constraints: const BoxConstraints(minHeight: 52.0),
      padding: const EdgeInsets.symmetric(horizontal: 8),
      color: Colors.white,
      child: OverflowBar(
        alignment: MainAxisAlignment.spaceBetween,
        spacing: 8,
        children: <Widget>[
          TextButton(
            onPressed: () {
              Navigator.of(context).pop();
            },
            child: Text(
              "取消",
              textScaleFactor: 1.2,
            ),
          ),
          TextButton(
            onPressed: () {
              Navigator.of(context).pop(chooseDuration);
            },
            child: Text(
              "确定",
              textScaleFactor: 1.2,
            ),
          ),
        ],
      ),
    );
    return actions;
  }

  Future<Duration?> _showCupertinoTimePickerForHMS(BuildContext context) {
    return showCupertinoModalPopup(
      context: context,
      builder: (context) {
        final cupertinoTimerPicker = CupertinoTimerPicker(
          mode: CupertinoTimerPickerMode.hms, // 时间选择器模式
          initialTimerDuration: Duration(hours: 1), // 初始化时间
          minuteInterval: 5, // 分钟间隔
          secondInterval: 20, // 秒钟间隔
          alignment: Alignment.center, // 对齐方式
          backgroundColor: Colors.white, // 背景色
          // 选中时间变化回调
          onTimerDurationChanged: (dur) {
            chooseDuration = dur;
          },
        );
        chooseDuration = cupertinoTimerPicker.initialTimerDuration;
        return AnimatedContainer(
          duration: Duration(microseconds: 200),
          height: 268,
          width: double.infinity,
          child: Container(
            color: Colors.white,
            child: Column(
              children: [
                _getActions2(context),
                Expanded(child: cupertinoTimerPicker),
              ],
            ),
          ),
        );
      },
    );
  }

  Future<Duration?> _showCupertinoTimePickerForMS(BuildContext context) {
    return showCupertinoModalPopup(
      context: context,
      builder: (context) {
        final cupertinoTimerPicker = CupertinoTimerPicker(
          mode: CupertinoTimerPickerMode.ms, // 时间选择器模式
          initialTimerDuration: Duration(minutes: 10), // 初始化时间
          minuteInterval: 5, // 分钟间隔
          secondInterval: 20, // 秒钟间隔
          alignment: Alignment.center, // 对齐方式
          backgroundColor: Colors.white, // 背景色
          // 选中时间变化回调
          onTimerDurationChanged: (dur) {
            chooseDuration = dur;
          },
        );
        chooseDuration = cupertinoTimerPicker.initialTimerDuration;
        return AnimatedContainer(
          duration: Duration(microseconds: 200),
          height: 268,
          width: double.infinity,
          child: Container(
            color: Colors.white,
            child: Column(
              children: [
                _getActions2(context),
                Expanded(child: cupertinoTimerPicker),
              ],
            ),
          ),
        );
      },
    );
  }

  Future<Duration?> _showCupertinoTimePickerForHM(BuildContext context) {
    return showCupertinoModalPopup(
      context: context,
      builder: (context) {
        final cupertinoTimerPicker = CupertinoTimerPicker(
          mode: CupertinoTimerPickerMode.hm, // 时间选择器模式
          initialTimerDuration: Duration(minutes: 20), // 初始化时间
          minuteInterval: 5, // 分钟间隔
          secondInterval: 20, // 秒钟间隔
          alignment: Alignment.center, // 对齐方式
          backgroundColor: Colors.white, // 背景色
          // 选中时间变化回调
          onTimerDurationChanged: (dur) {
            chooseDuration = dur;
          },
        );
        chooseDuration = cupertinoTimerPicker.initialTimerDuration;
        return AnimatedContainer(
          duration: Duration(microseconds: 200),
          height: 268,
          width: double.infinity,
          child: Container(
            color: Colors.white,
            child: Column(
              children: [
                _getActions2(context),
                Expanded(child: cupertinoTimerPicker),
              ],
            ),
          ),
        );
      },
    );
  }
}

127.gif

三方库flutter_cupertino_datetime_picker Demo

import 'package:flutter/material.dart';

import 'package:flutter_cupertino_datetime_picker/flutter_cupertino_datetime_picker.dart'
    as iOSDatePicker;

class MSCupertinoDatetimePickerLibDemo extends StatelessWidget {
  const MSCupertinoDatetimePickerLibDemo({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("三方日期选择库")),
      body: SingleChildScrollView(
        child: Center(
          child: Column(
            children: [
              ElevatedButton(
                onPressed: () {
                  _showDatePickerForTime(context);
                },
                child: Text("DatePicker-Time"),
              ),
              ElevatedButton(
                onPressed: () {
                  _showDatePickerForDateTime(context);
                },
                child: Text("DatePicker-DateTime"),
              ),
              ElevatedButton(
                onPressed: () {
                  _showDatePickerForDate(context);
                },
                child: Text("DatePicker-Date"),
              ),
            ],
          ),
        ),
      ),
    );
  }

  _showDatePickerForTime(BuildContext context) {
    iOSDatePicker.DatePicker.showDatePicker(
      context, // 上下文
      pickerMode: iOSDatePicker.DateTimePickerMode.time, // 选择器模式
      dateFormat: "HH:mm:ss", // 日期格式
      minuteDivider: 5, // 分钟间隔
      // 选择回调
      onConfirm: (DateTime dateTime, List<int> selectedIndex) {
        print("选择 $dateTime");
      },
      // 取消回调
      onCancel: () {},
      // 关闭回调
      onClose: () {},
      // 选中时间发生变化 回调
      onChange: (datetime, selectedIndex) {},
    );
  }

  _showDatePickerForDateTime(BuildContext context) {
    iOSDatePicker.DatePicker.showDatePicker(
      context,
      pickerMode: iOSDatePicker.DateTimePickerMode.datetime,
      minDateTime: DateTime(2022, 1, 10),
      maxDateTime: DateTime(2022, 10, 10),
      dateFormat: "yyyy|MM|dd HH:mm",
      onConfirm: (DateTime dateTime, List<int> selectedIndex) {
        print("选择 $dateTime");
      },
      onCancel: () {},
      onClose: () {},
      onChange: (datetime, selectedIndex) {},
    );
  }

  _showDatePickerForDate(BuildContext context) {
    iOSDatePicker.DatePicker.showDatePicker(
      context,
      pickerMode: iOSDatePicker.DateTimePickerMode.date,
      minDateTime: DateTime(2022, 1, 10),
      maxDateTime: DateTime(2022, 10, 10),
      initialDateTime: DateTime.now(),
      dateFormat: "MM|dd,yyyy年",
      onConfirm: (DateTime dateTime, List<int> selectedIndex) {
        print("选择 $dateTime");
      },
      onCancel: () {},
      onClose: () {},
      onChange: (datetime, selectedIndex) {},
    );
  }
}

128.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容