diff --git a/pydantic/types.py b/pydantic/types.py
--- a/pydantic/types.py
+++ b/pydantic/types.py
@@ -599,7 +599,10 @@ def list_length_validator(cls, v: 'Optional[List[T]]') -> 'Optional[List[T]]':
         return v
 
     @classmethod
-    def unique_items_validator(cls, v: 'List[T]') -> 'List[T]':
+    def unique_items_validator(cls, v: 'Optional[List[T]]') -> 'Optional[List[T]]':
+        if v is None:
+            return None
+
         for i, value in enumerate(v, start=1):
             if value in v[i:]:
                 raise errors.ListUniqueItemsError()


Shall I raise one PR to [1.9.X-fixes](https://github.com/samuelcolvin/pydantic/tree/1.9.X-fixes)
What happens on 1.8.2?
There is no support for `unique_items` in pydantic version 1.8.2
``` py
class Model(BaseModel):
    foo: Optional[List[str]] = Field(None, unique_items=True)

Model(foo=['a','a','a'], bar=None)
```
Won't raise any issues (duplicate items are there in the list) and 
``` py
class Model(BaseModel):
    bar: conlist(str, unique_items=True) = Field(None)

Model(bar=['a','a','a'])
```
Will raise an issue 
```
Traceback (most recent call last):
  File "/Users/developer/test.py", line 1, in <module>
    class Model(BaseModel):
  File "/Users/developer/test.py", line 2, in Model
    bar: conlist(str, unique_items=True) = Field(None)
  File "pydantic/types.py", line 509, in pydantic.types.conlist
TypeError: conlist() got an unexpected keyword argument 'unique_items'
```

ps: I need the support for `unique_items`.
Sorry, my bad. 🙈 

Yes, pr against that branch please.
Did this PR ever get made? If not, I'd be happy to create it.
diff --git a/tests/test_validators.py b/tests/test_validators.py
--- a/tests/test_validators.py
+++ b/tests/test_validators.py
@@ -7,7 +7,7 @@
 import pytest
 from typing_extensions import Literal
 
-from pydantic import BaseModel, ConfigError, Extra, Field, ValidationError, errors, validator
+from pydantic import BaseModel, ConfigError, Extra, Field, ValidationError, conlist, errors, validator
 from pydantic.class_validators import make_generic_validator, root_validator
 
 
@@ -1329,3 +1329,19 @@ def post_root(cls, values):
 
     B(x='pika')
     assert validate_stub.call_args_list == [mocker.call('B', 'pre'), mocker.call('B', 'post')]
+
+
+def test_list_unique_items_with_optional():
+    class Model(BaseModel):
+        foo: Optional[List[str]] = Field(None, unique_items=True)
+        bar: conlist(str, unique_items=True) = Field(None)
+
+    assert Model().dict() == {'foo': None, 'bar': None}
+    assert Model(foo=None, bar=None).dict() == {'foo': None, 'bar': None}
+    assert Model(foo=['k1'], bar=['k1']).dict() == {'foo': ['k1'], 'bar': ['k1']}
+    with pytest.raises(ValidationError) as exc_info:
+        Model(foo=['k1', 'k1'], bar=['k1', 'k1'])
+    assert exc_info.value.errors() == [
+        {'loc': ('foo',), 'msg': 'the list has duplicated items', 'type': 'value_error.list.unique_items'},
+        {'loc': ('bar',), 'msg': 'the list has duplicated items', 'type': 'value_error.list.unique_items'},
+    ]

Optional[conlist(..., unique_items=True)] raises exception if value is None
### Checks

* [x] I added a descriptive title to this issue
* [x] I have searched (google, github) for similar issues and couldn't find anything
* [x] I have read and followed [the docs](https://pydantic-docs.helpmanual.io/) and still think this is a bug

<!-- Sorry to sound so draconian, but every second saved replying to issues is time spend improving pydantic :-) -->

# Bug

Output of `python -c "import pydantic.utils; print(pydantic.utils.version_info())"`:
```
             pydantic version: 1.9.0
            pydantic compiled: True
                 install path: /Users/.../code/venvs/.../lib/python3.9/site-packages/pydantic
               python version: 3.9.9 (v3.9.9:ccb0e6a345, Nov 15 2021, 13:06:05)  [Clang 13.0.0 (clang-1300.0.29.3)]
                     platform: macOS-12.0.1-arm64-arm-64bit
     optional deps. installed: ['dotenv', 'email-validator', 'typing-extensions']

```
<!-- or if you're using pydantic prior to v1.3, manually include: OS, python version and pydantic version -->

<!-- Please read the [docs](https://pydantic-docs.helpmanual.io/) and search through issues to
confirm your bug hasn't already been reported. -->

<!-- Where possible please include a self-contained code snippet describing your bug: -->

```py
from typing import Optional

from pydantic import BaseModel, conlist


class Model(BaseModel):
    fuel_types: Optional[conlist(str, min_items=1, unique_items=True)]


Model(fuel_types=None)

```
```
Traceback (most recent call last):
  File "/Users/.../code/python/.../ttt.py", line 10, in <module>
    Model(fuel_types=None)
  File "pydantic/main.py", line 331, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for Model
fuel_types
  'NoneType' object is not iterable (type=type_error)
```
This snippet above shouldn't lead to exception, but it does. Probably quick fix is replacing this code
https://github.com/samuelcolvin/pydantic/blob/91ecfd651e2f6f0820b5f12f79b9c33163d309d8/pydantic/types.py#L572-L578
with this one
```python
    @classmethod
    def unique_items_validator(cls, v: 'Optional[List[T]]') -> 'Optional[List[T]]':
        if v is None:
            return None

        for i, value in enumerate(v, start=1):
            if value in v[i:]:
                raise errors.ListUniqueItemsError()

        return v
```
Unexpected validation error with optional list field with unique_items check
### Checks

* [x] I added a descriptive title to this issue
* [x] I have searched (google, GitHub) for similar issues and couldn't find anything
* [x] I have read and followed [the docs](https://pydantic-docs.helpmanual.io/) and still think this is a bug


# Bug

Output of `python -c "import pydantic.utils; print(pydantic.utils.version_info())"`:
```
             pydantic version: 1.9.0
            pydantic compiled: True
                 install path: /home/foo/lib/python3.8/site-packages/pydantic
               python version: 3.8.5 (default, Dec 29 2021, 04:21:09)  [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
                     platform: Linux-3.10.0-1160.49.1.el7.x86_64-x86_64-with-glibc2.17
     optional deps. installed: ['dotenv', 'email-validator', 'typing-extensions']
```


Related discussion: https://github.com/samuelcolvin/pydantic/discussions/4050
```py
from typing import Optional, List
from pydantic import BaseModel, Field, conlist, ValidationError

class Model(BaseModel):
    foo: Optional[List[str]] = Field(None, unique_items=True)
    bar: conlist(str, unique_items=True) = Field(None)

try:
    Model(foo=None, bar=None)
except ValidationError as exc_info:
    assert exc_info.errors() == [
        {
            'loc': ('foo',), 
            'msg': "'NoneType' object is not iterable", 
            'type': 'type_error'
        }, 
        {
            'loc': ('bar',), 
            'msg': "'NoneType' object is not iterable", 
            'type': 'type_error'
        }
    ]
```

### Test case
``` py
def test_list_unique_items_with_optional():
    class Model(BaseModel):
        foo: Optional[List[str]] = Field(None, unique_items=True)
        bar: conlist(str, unique_items=True) = Field(None)

    assert Model().dict() == {'foo':None, 'bar': None}
    assert Model(foo=None, bar=None).dict() == {'foo':None, 'bar': None}
    assert Model(foo=["k1"], bar=["k1"]).dict() == {'foo': ["k1"], 'bar': ["k1"]}
    with pytest.raises(ValidationError) as exc_info:
        Model(foo=["k1", "k1"], bar=["k1", "k1"])
    assert exc_info.value.errors() == [
        {
            'loc': ('foo',),
            'msg': 'the list has duplicated items',
            'type': 'value_error.list.unique_items'
        },
        {
            'loc': ('bar',),
            'msg': 'the list has duplicated items',
            'type': 'value_error.list.unique_items'
        }
    ]
```
### Fix
Update the `unique_items_validator` function code to.
``` py
    @classmethod
    def unique_items_validator(cls, v: 'Optional[List[T]]') -> 'Optional[List[T]]':
        if v is None:
            return v
        for i, value in enumerate(v, start=1):
            if value in v[i:]:
                raise errors.ListUniqueItemsError()

        return v
```

`Tested this and ran all test cases and successfully passed.`

Please verify.
Cc: @samuelcolvin 

tests/test_validators.py::test_list_unique_items_with_optional
tests/test_validators.py::test_simple tests/test_validators.py::test_int_validation tests/test_validators.py::test_int_overflow_validation[inf0] tests/test_validators.py::test_int_overflow_validation[nan] tests/test_validators.py::test_int_overflow_validation[inf1] tests/test_validators.py::test_frozenset_validation tests/test_validators.py::test_deque_validation tests/test_validators.py::test_validate_whole tests/test_validators.py::test_validate_kwargs tests/test_validators.py::test_validate_pre_error tests/test_validators.py::test_validating_assignment_ok tests/test_validators.py::test_validating_assignment_fail tests/test_validators.py::test_validating_assignment_value_change tests/test_validators.py::test_validating_assignment_extra tests/test_validators.py::test_validating_assignment_dict tests/test_validators.py::test_validating_assignment_values_dict tests/test_validators.py::test_validate_multiple tests/test_validators.py::test_classmethod tests/test_validators.py::test_duplicates tests/test_validators.py::test_use_bare tests/test_validators.py::test_use_no_fields tests/test_validators.py::test_validate_always tests/test_validators.py::test_validate_always_on_inheritance tests/test_validators.py::test_validate_not_always tests/test_validators.py::test_wildcard_validators tests/test_validators.py::test_wildcard_validator_error tests/test_validators.py::test_invalid_field tests/test_validators.py::test_validate_child tests/test_validators.py::test_validate_child_extra tests/test_validators.py::test_validate_child_all tests/test_validators.py::test_validate_parent tests/test_validators.py::test_validate_parent_all tests/test_validators.py::test_inheritance_keep tests/test_validators.py::test_inheritance_replace tests/test_validators.py::test_inheritance_new tests/test_validators.py::test_validation_each_item tests/test_validators.py::test_validation_each_item_one_sublevel tests/test_validators.py::test_key_validation tests/test_validators.py::test_validator_always_optional tests/test_validators.py::test_validator_always_pre tests/test_validators.py::test_validator_always_post tests/test_validators.py::test_validator_always_post_optional tests/test_validators.py::test_validator_bad_fields_throws_configerror tests/test_validators.py::test_datetime_validator tests/test_validators.py::test_pre_called_once tests/test_validators.py::test_make_generic_validator[fields0-_v_] tests/test_validators.py::test_make_generic_validator[fields1-_v_] tests/test_validators.py::test_make_generic_validator[fields2-_v_,_field_] tests/test_validators.py::test_make_generic_validator[fields3-_v_,_config_] tests/test_validators.py::test_make_generic_validator[fields4-_v_,_values_] tests/test_validators.py::test_make_generic_validator[fields5-_v_,_field_,_config_] tests/test_validators.py::test_make_generic_validator[fields6-_v_,_field_,_values_] tests/test_validators.py::test_make_generic_validator[fields7-_v_,_config_,_values_] tests/test_validators.py::test_make_generic_validator[fields8-_v_,_field_,_values_,_config_] tests/test_validators.py::test_make_generic_validator[fields9-_cls_,_v_] tests/test_validators.py::test_make_generic_validator[fields10-_cls_,_v_] tests/test_validators.py::test_make_generic_validator[fields11-_cls_,_v_,_field_] tests/test_validators.py::test_make_generic_validator[fields12-_cls_,_v_,_config_] tests/test_validators.py::test_make_generic_validator[fields13-_cls_,_v_,_values_] tests/test_validators.py::test_make_generic_validator[fields14-_cls_,_v_,_field_,_config_] tests/test_validators.py::test_make_generic_validator[fields15-_cls_,_v_,_field_,_values_] tests/test_validators.py::test_make_generic_validator[fields16-_cls_,_v_,_config_,_values_] tests/test_validators.py::test_make_generic_validator[fields17-_cls_,_v_,_field_,_values_,_config_] tests/test_validators.py::test_make_generic_validator_kwargs tests/test_validators.py::test_make_generic_validator_invalid tests/test_validators.py::test_make_generic_validator_cls_kwargs tests/test_validators.py::test_make_generic_validator_cls_invalid tests/test_validators.py::test_make_generic_validator_self tests/test_validators.py::test_assert_raises_validation_error tests/test_validators.py::test_whole tests/test_validators.py::test_root_validator tests/test_validators.py::test_root_validator_pre tests/test_validators.py::test_root_validator_repeat tests/test_validators.py::test_root_validator_repeat2 tests/test_validators.py::test_root_validator_self tests/test_validators.py::test_root_validator_extra tests/test_validators.py::test_root_validator_types tests/test_validators.py::test_root_validator_inheritance tests/test_validators.py::test_root_validator_returns_none_exception tests/test_validators.py::test_reuse_global_validators tests/test_validators.py::test_allow_reuse[True-True-True-True] tests/test_validators.py::test_allow_reuse[True-True-True-False] tests/test_validators.py::test_allow_reuse[True-True-False-True] tests/test_validators.py::test_allow_reuse[True-True-False-False] tests/test_validators.py::test_allow_reuse[True-False-True-True] tests/test_validators.py::test_allow_reuse[True-False-True-False] tests/test_validators.py::test_allow_reuse[True-False-False-True] tests/test_validators.py::test_allow_reuse[True-False-False-False] tests/test_validators.py::test_allow_reuse[False-True-True-True] tests/test_validators.py::test_allow_reuse[False-True-True-False] tests/test_validators.py::test_allow_reuse[False-True-False-True] tests/test_validators.py::test_allow_reuse[False-True-False-False] tests/test_validators.py::test_allow_reuse[False-False-True-True] tests/test_validators.py::test_allow_reuse[False-False-True-False] tests/test_validators.py::test_allow_reuse[False-False-False-True] tests/test_validators.py::test_allow_reuse[False-False-False-False] tests/test_validators.py::test_root_validator_classmethod[True-True] tests/test_validators.py::test_root_validator_classmethod[True-False] tests/test_validators.py::test_root_validator_classmethod[False-True] tests/test_validators.py::test_root_validator_classmethod[False-False] tests/test_validators.py::test_root_validator_skip_on_failure tests/test_validators.py::test_assignment_validator_cls tests/test_validators.py::test_literal_validator tests/test_validators.py::test_literal_validator_str_enum tests/test_validators.py::test_nested_literal_validator tests/test_validators.py::test_union_literal_with_constraints tests/test_validators.py::test_field_that_is_being_validated_is_excluded_from_validator_values tests/test_validators.py::test_exceptions_in_field_validators_restore_original_field_value tests/test_validators.py::test_overridden_root_validators