When you don't check a checkbox it wont be present on the request. Try with required_with instead of required_if:
'state' => 'required_with:tocheck',
As for the not_in rule, it won't be necessary here: you can let the value on your 'Please Select' option as an empty string. Laravel will convert that to null with the ConvertEmptyStringsToNull middleware and since tocheck is checked, it will be present on the request so state is not allowed to be null. But just to clarify,your usage of the not_in rule is wrong. Here's how you use it:
You need to import
use Illuminate\Validation\Rule;
and use it like this:
'tocheck' => 'sometimes',
'state' => ['required', Rule::notIn(['Please Select', 'foo', 'bar'])],
Finally, I don't think you need the sometimes rule on your tocheck. The sometimes rule is intended to use with other rules. It is used when something is not required to be present, but needs to meet some requirements when it is present. So if you are OK with your tocheck not being on your request (when it is not checked) but you need it to be boolean, or numeric, or whatever when it is checked, then you use sometimes:
'tocheck' => ['sometimes', Rule::in(['on'])], // It is not required, but if it's present, then it needs to be 'on' otherwise validation will fail
https://laravel.com/docs/5.8/validation#rule-required-with https://laravel.com/docs/5.8/validation#rule-not-in https://laravel.com/docs/5.8/validation#conditionally-adding-rules https://laravel.com/docs/5.8/validation#rule-in